我正在寻找一种方法来提取节点并将其复制到输出中的其他位置。我希望用xsl:analyze-string来做这个,但是因为选择是节点的集合(例如,文本节点,后跟的xsl:analyze-string的select表达式)不起作用一个元素,后跟一个文本节点。)只有在我将输入修改为只有一个文本节点时才有效。但我的输入是下面的条目[2],这不仅仅是文本。即使我选择条目[2] / p,文本中也包含XML标记,除了文本之外,它们是元素节点。所以这是输入XML:
<rows>
<row>
<entry>
<p>ID <varname>IdValue</varname></p>
<p>Date <varname>date</varname></p>
<p>sObject <varname>myObj</varname></p>
</entry>
<entry>
<p>The <varname>IdValue</varname> argument provides humor.</p>
<p>The <varname>date</varname> argument specifies how young this language is.</p>
<p>The <varname>myObj</varname> argument specifies the darkness of times.</p>
</entry>
</row>
</rows>
,这是所需的输出XML:
<section>
<parameters>
<param>
<pn><varname>IdValue</varname></pn>
<pv>The <varname>IdValue</varname> argument provides humor.</pv>
</param>
<param>
<pn><varname>date</varname></pn>
<pv>The <varname>date</varname> argument specifies how young this language is.</pv>
</param>
<param>
<pn><varname>myObj</varname></pn>
<pv>The <varname>myObj</varname> argument specifies the darkness of times.</pv>
</param>
</parameters>
</section>
对于在条目[1]中找到的每个varname,如何在条目[2]中找到匹配的描述?
答案 0 :(得分:1)
我能想到的最简单的XSLT解决方案就像这样
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="rows">
<section>
<xsl:apply-templates select="row" />
</section>
</xsl:template>
<xsl:template match="row">
<parameters>
<xsl:apply-templates select="entry[1]/p/varname" />
</parameters>
</xsl:template>
<xsl:template match="entry[1]/p/varname">
<param>
<pn>
<xsl:copy-of select="." />
</pn>
<pv>
<xsl:copy-of select="ancestor::row/entry[2]//p[varname = current()]/node()" />
</pv>
</param>
</xsl:template>
</xsl:stylesheet>
并制作
<section>
<parameters>
<param>
<pn><varname>IdValue</varname></pn>
<pv>The <varname>IdValue</varname> argument provides humor.</pv>
</param>
<param>
<pn><varname>date</varname></pn>
<pv>The <varname>date</varname> argument specifies how young this language is.</pv>
</param>
<param>
<pn><varname>myObj</varname></pn>
<pv>The <varname>myObj</varname> argument specifies the darkness of times.</pv>
</param>
</parameters>
</section>
请注意使用current()
XSLT函数。