简单的XSL转换

时间:2010-01-22 16:40:20

标签: xml xslt

好的,星期五下午,我需要完成这件事:

需要转换以下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>

请注意,'19h30'已更改为'19'。

我的xslt不太好,但我知道它应该很简单。

XSLT文档应该如何进行此转换?

2 个答案:

答案 0 :(得分:2)

标识转换以及与您要更改的属性匹配的模板。第二个模板复制输入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>

答案 1 :(得分:0)

这最终起了作用:

<?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>