使用XSLT修改XML文件中的属性

时间:2012-11-02 10:08:12

标签: xml xslt

我想修改一个XML文件,我在这个XML文件中有一些属性,我想改变它,即如果生产者是大众,那么我想将国家改为“德国” hier是我的XML:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="example.xslt"?>
<Auto>
  <lkw producer="VW" country="USA">
    <name>Polo</name>
    <price>$5955.2</price>
    <color>red</color>
  </lkw>
  <lkw producer="Audi" country="germany">
    <name>A8</name>
    <price>$8955.2</price>
    <color>black</color>
  </lkw>
  <lkw producer="BMW" country="USA">
    <name>Polo</name>
    <price>$6955.2</price>
    <color>blue</color>
  </lkw>
 <lkw producer="VW" country="China">
    <name>Pasat</name>
    <price>$2955.2</price>
    <color>red</color>
  </lkw>
</Auto>

这是我的XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="@producer[parent::VW]">
    <xsl:attribute name="country">
      <xsl:value-of select="'germany'"/>
    </xsl:attribute>
  </xsl:template>
</xsl:stylesheet>

但我看到我的XML文件没有变化,你能否告诉我,我在XSLT中的错误在哪里?

1 个答案:

答案 0 :(得分:1)

查看您当前的模板......

<xsl:template match="@producer[parent::VW]">

这实际上相当于......

<xsl:template match="VW/@producer">

所以,当你真的想要检查属性的值时,它正在寻找一个名为 VW 的元素。

您真正要做的是, @country 属性与 @producer 属性等于 VW <的元素相匹配/ p>

<xsl:template match="lkw[@producer='VW']/@country">
  <xsl:attribute name="country">
    <xsl:value-of select="'germany'"/>
  </xsl:attribute>
</xsl:template>