我需要提取<C></C>
,方法是将参数传递给xslt,如下所示
<C>
<D></D>
<D></D>
</C>
使用xslt从下面的XML中获取。
<A>
<B/>
<C>
<D></D>
<D></D>
</C>
<E><D></D></E>
</A>
如果我能够将元素的值设置为&#34; C&#34;,我如何能够执行上述操作。我现在的xslt模板如下所示。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:param name="element" />
<xsl:template match="/">
<$element>
<xsl:processing-instruction name="xml-multiple">
<xsl:value-of select="local-name(//D)" />
</xsl:processing-instruction>
<xsl:copy-of select="/A/$element/D" />
</$element>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
无法输入元素名称作为参数,并直接在select
的XPath中使用它。
但是你可以用这种方式重构样式表:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:param name="element" select="'C'"/>
<xsl:template match="/">
<xsl:element name="{$element}">
<xsl:processing-instruction name="xml-multiple">
<xsl:value-of select="local-name(//D)" />
</xsl:processing-instruction>
<xsl:copy-of select="/A/*[name() = $element]/D" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
获得的结果:
<?xml version="1.0" encoding="UTF-8"?>
<C>
<?xml-multiple D?>
<D/><D/>
</C>
对应于所需的输出。