我有这个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"/>
答案 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)]"