我有一个像这样的输入xml文件
<document startnum="1" language="en-US">
<meta>
<categories>
<category medicalbranch="surgery">
</category>
</categories>
<doctitle>Traumatology for the Physical Therapist</doctitle>
<relatedobjects>
<relpdfio/>
</relatedobjects>
<publisher>
<publishername>Georg Thieme Verlag</publishername>
<copyright>Georg Thieme Verlag</copyright>
</publisher>
</meta>
输出xml应如下所示
<document startnum="1" language="en-US">
<meta>
<categories>
<category medicalbranch="surgery">
</category>
</categories>
<isbn type="print"> </isbn>
<isbn type="online"> </isbn>
<materialid/>
<metadata type="searchlevel"/>
<doctitle>Traumatology for the Physical Therapist</doctitle>
<relatedobjects>
<relpdfio/>
</relatedobjects>
<publisher>
<publishername>Georg Thieme Verlag</publishername>
<copyright>Georg Thieme Verlag</copyright>
</publisher>
</meta>
每当“meta”元素在源代码中不包含“isbn”时,我需要插入上面提到的4个元素。
我写了如下xslt:
<xsl:template match="meta">
<xsl:if test="node[not(isbn)]">
<xsl:element name="isbn">
<xsl:attribute name="type">print</xsl:attribute>
<xsl:text> </xsl:text>
</xsl:element><xsl:text>
</xsl:text>
<xsl:element name="isbn">
<xsl:attribute name="type">online</xsl:attribute>
<xsl:text> </xsl:text>
</xsl:element>
<xsl:text>
</xsl:text>
<xsl:element name="materialid"></xsl:element><xsl:text>
</xsl:text>
<xsl:element name="metadata">
<xsl:attribute name="type">searchlevel</xsl:attribute></xsl:element>
<xsl:text>
</xsl:text>
<!--<xsl:text disable-output-escaping="yes">-\-></xsl:text>-->
<xsl:apply-templates select="@*|node()"/>
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
您能否帮我们解决此问题。
答案 0 :(得分:0)
从身份转换模板
开始<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
然后决定要插入新元素的位置,例如在categories
元素之后,例如
<xsl:template match="meta[not(isbn)]/categories">
<xsl:next-match/><!-- copies the categories element with the identity transformation template -->
<isbn type="print"> </isbn>
<isbn type="online"> </isbn>
<materialid/>
<metadata type="searchlevel"/>
</xsl:template>