我希望删除xml中的几个节点并添加一个新节点。让我用以下xml来说明:
<resprocessing>
<respcondition title="Correct" continue="No">
<conditionvar>
<varequal respident="Response_0">
<nhm_blank_name>Answer:</nhm_blank_name>
<nhm_numerator>14</nhm_numerator>
<nhm_denominator>25</nhm_denominator>
<nhm_allow_multiples>No</nhm_allow_multiples>
</varequal>
</conditionvar>
</respcondition>
</resprocessing>
我想删除节点<nhm_numerator>
和<nhm_denominator>
并在<nhm_blank_value>
下插入新节点(<varequal>
),同时保留其他两个节点<nhm_blank_name>
{ {1}}
新节点的值如下:
<nhm_allow_multiples>
我使用以下XSLT成功删除上述节点。但我无法添加新节点。请告诉我哪里出错了
<nhm_blank_value>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mfrac>
<mn>14</mn>
<mn>25</mn>
</mfrac>
</math>
</nhm_blank_value>
答案 0 :(得分:1)
我会做这样的事情
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*" />
<!-- copy the xml as it is -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- delete denominator -->
<xsl:template match="nhm_denominator" />
<!-- replace numerator with mathml fragment -->
<xsl:template match="nhm_numerator">
<nhm_blank_value>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mfrac>
<mn><xsl:value-of select="." /></mn>
<mn><xsl:value-of select="../nhm_denominator"/></mn>
</mfrac>
</math>
</nhm_blank_value>
</xsl:template>
</xsl:stylesheet>
这将从原始XML中提取正确的分子和分母值,而不是硬编码14和25.当在示例XML上运行时,它会生成正确的输出:
<resprocessing>
<respcondition title="Correct" continue="No">
<conditionvar>
<varequal respident="Response_0">
<nhm_blank_name>Answer:</nhm_blank_name>
<nhm_blank_value>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mfrac>
<mn>14</mn>
<mn>25</mn>
</mfrac>
</math>
</nhm_blank_value>
<nhm_allow_multiples>No</nhm_allow_multiples>
</varequal>
</conditionvar>
</respcondition>
</resprocessing>