Простое XSL-преобразование - PullRequest
0 голосов
/ 22 января 2010

ОК, сегодня пятница, и мне нужно сделать это:

Необходимо преобразовать следующий xml:

<?xml version="1.0" encoding="UTF-8"?>
<ProfiledSettings>
  <PropertySet File="properties.txt">
    <Property Name="scheduler.time">19h30</Property>
  </PropertySet>
  <PropertySet File="properties2.txt">
    <Property Name="inclusions.filters" />
    <Property Name="inclusions" />
  </PropertySet>
</ProfiledSettings>

к этому:

<?xml version="1.0" encoding="UTF-8"?>
<ProfiledSettings>
  <PropertySet File="properties.txt">
    <Property Name="scheduler.time">19</Property>
  </PropertySet>
  <PropertySet File="properties2.txt">
    <Property Name="inclusions.filters" />
    <Property Name="inclusions" />
  </PropertySet>
</ProfiledSettings>

Обратите внимание, что «19:30» изменилось на «19».

Мой xslt не так хорош, но я знаю, что все должно быть просто.

Как должен выглядеть документ XSLT для этого преобразования?

Ответы [ 2 ]

2 голосов
/ 22 января 2010

Идентификационное преобразование плюс шаблон, соответствующий свойству, которое вы хотите изменить. Второй шаблон создает копию входного узла Property со всеми его атрибутами и изменяет текстовое содержимое.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Property[@Name='scheduler.time']">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:value-of select="substring-before(text(),'h')"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
0 голосов
/ 22 января 2010

Вот что в итоге сработало:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:output method="xml" indent="yes"/>

    <xsl:template match="Property[@Name='scheduler.time']">
        <xsl:copy>
          <xsl:apply-templates select="@*" />
          <xsl:value-of select="substring-before(text(),'h')"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="@*">
      <xsl:copy>
      </xsl:copy>
    </xsl:template>

  <xsl:template match="node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...