我有这个xsl片段,我想将它应用于一个xml文件。match中的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"/>
发布于 2014-02-02 04:11:31
你已经走了很远了。从Identity样式表开始:
<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>
在标记的位置,插入模板来处理您的特殊情况--这几乎是正确的,只是您需要复制要向其中添加属性的元素,并且需要复制其他属性和子元素(它是"identity but add this attribute")
<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)]"
可能就足够了
https://stackoverflow.com/questions/21502437
复制相似问题