0

我想修改一个 XML 文件,我在这个 XML 文件中有一些属性,我想更改它,即如果生产商是大众,那么我想将国家更改为“德国”,这是我的 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 中的错误在哪里?

4

1 回答 1

1

查看您当前的模板...

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

这其实等价于...

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

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

你真正想要做的是匹配@producer属性等于VW的元素的@country属性

<xsl:template match="lkw[@producer='VW']/@country">
  <xsl:attribute name="country">
    <xsl:value-of select="'germany'"/>
  </xsl:attribute>
</xsl:template>
于 2012-11-02T10:32:19.477 回答