如何使用xsl更新xml文件

时间:2014-02-01 19:22:17

标签: xml xslt

我有这个xsl片段,我想将其应用于xml文件。匹配中的xpath数据是正确的,我已经测试过了。我想为每个没有指定值的ITEXT添加字体属性。我该怎么做?

    <xsl:template match="//PAGEOBJECT[@LAYER=2]/ITEXT[not(@FONT)]">
        <xsl:attribute name="FONT">Book Antiqua Regular</xsl:attribute>
    </xsl:template>

示例XML代码段:

<ITEXT FONT="Book Antiqua Italic" KERN="-1" CH="somedata"/>
<ITEXT CH="somedata"CH="somedata"/>
<ITEXT FONT="Book Antiqua Italic" CH="somedata"/>
<ITEXT CH="somedata"/>
<ITEXT FONT="Book Antiqua Italic" CH="somedata"/>
<ITEXT FONT="Book Antiqua Italic" CH="somedata"/>
<ITEXT FONT="Book Antiqua Italic" CH="somedata"/>
<ITEXT CH="somedata"/>
<ITEXT CH="somedata"/>

1 个答案:

答案 0 :(得分:1)

你大部分都在那里。从标识样式表开始:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- Insert additional templates here.... -->

</xsl:stylesheet>

在标记的位置插入模板以处理您的特殊情况 - 这几乎是正确的,除了您需要复制要添加属性的元素,并且您需要复制其他属性和子项(它是“身份但添加此属性”)

<xsl:template match="//PAGEOBJECT[@LAYER=2]/ITEXT[not(@FONT)]">
   <xsl:copy>
     <xsl:attribute name="FONT">Book Antiqua Regular</xsl:attribute>
     <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
</xsl:template>

请注意,您可能不需要复杂的匹配表达式;这可能就足够了 match="ITEXT[not(@FONT)]"