访问存储在xslt变量中的xml
此代码未给出所需的结果。请帮助。此代码未给出所需的结果。请帮助。 此代码未给出所需的结果。请帮助访问存储在xslt变量中的xml,xslt,Xslt,此代码未给出所需的结果。请帮助。此代码未给出所需的结果。请帮助。 此代码未给出所需的结果。请帮助 <xsl:template match="/"> <xsl:variable name="Resp"> <Response> <Status> <A></A> </Status> <RespRec>
<xsl:template match="/">
<xsl:variable name="Resp">
<Response>
<Status>
<A></A>
</Status>
<RespRec>
<Data>
<A1>gmailcom</A1>
<B1>YES</B1>
<C1>PRIVACY</C1>
<D1>00</D1>
</Data>
<Data>
<A1>Ymailcom</A1>
<B1>DES</B1>
<C1>TYPE</C1>
<D1>01</D1>
</Data>
</RespRec>
</Response>
</xsl:variable>
<xsl:element name="Response">
<xsl:for-each select="$Resp/Response/RespRec/Data">
<ABCD> <!-- It can repeat as many as Data element is there -->
<A1>
<xsl:value-of select="$Resp/Response/RespRec/Data/A1" />
</A1>
<B1>
<xsl:value-of select="$Resp/Response/RespRec/Data/B1" />
</B1>
<C1>
<xsl:value-of select="$Resp/Response/RespRec/Data/C1" />
</C1>
<D1>
<xsl:value-of select="$Resp/Response/RespRec/Data/D1" />
</D1>
</ABCD>
</xsl:for-each>
</xsl:element>
</xsl:template>
Gmail公司
对
隐私
00
伊梅尔康
DES
类型
01
期望输出:
<Response>
<ABCD>
<A1>gmailcom</A1>
<B1>YES</B1>
<C1>PRIVACY</C1>
<D1>00</D1>
</ABCD>
<ABCD>
<A1>Ymailcom</A1>
<B1>DES</B1>
<C1>TYPE</C1>
<D1>01</D1>
</ABCD>
</Response>
Gmail公司
对
隐私
00
伊梅尔康
DES
类型
01
但是上面的代码没有给出期望的结果。请帮助。
但是上面的代码没有给出期望的结果。请帮助。但是上面的代码没有给出期望的结果。请帮助 在XSLT1.0中,这样输出的XML称为结果树片段。它不是节点集,因此不能在XPath选择中使用它。基本上,你唯一能做的就是把它复制到结果文档中。(谢天谢地,XSLT2.0修复了这个愚蠢的问题。) 但是,如果XSLT处理器支持EXSLT扩展,则可以使用exsl:node set将结果树片段转换为节点集 而且,xsl:value语句并没有完成您希望它们完成的任务。在xsl:for-each循环中,上下文节点是一个数据节点。然后尝试再次从顶部选择,而不仅仅是选择子元素。将其更改为如下所示:
<A1>
<xsl:value-of select="A1" />
</A1>
在XSLT1.0中,这样输出的XML称为结果树片段。它不是节点集,因此不能在XPath选择中使用它。基本上,你唯一能做的就是把它复制到结果文档中。(谢天谢地,XSLT2.0修复了这个愚蠢的问题。) 但是,如果XSLT处理器支持EXSLT扩展,则可以使用exsl:node set将结果树片段转换为节点集 而且,xsl:value语句并没有完成您希望它们完成的任务。在xsl:for-each循环中,上下文节点是一个数据节点。然后尝试再次从顶部选择,而不仅仅是选择子元素。将其更改为如下所示:
<A1>
<xsl:value-of select="A1" />
</A1>
假设您使用XSLT 2.0处理器,您可以使用XPath访问变量的内容,但需要在
中为每个使用相对表达式,例如
<xsl:for-each select="$Resp/Response/RespRec/Data">
<ABCD> <!-- It can repeat as many as Data element is there -->
<A1>
<xsl:value-of select="A1" />
</A1>
但是,我建议编写一个模板,并使用apply templates
将节点推送到模板中。假设您使用XSLT 2.0处理器,您可以使用XPath访问变量的内容,但需要在中为每个使用相对表达式,例如
<xsl:for-each select="$Resp/Response/RespRec/Data">
<ABCD> <!-- It can repeat as many as Data element is there -->
<A1>
<xsl:value-of select="A1" />
</A1>
但是,我建议编写一个模板,并使用apply templates
如何选择具有相同名称的子元素将节点推送到模板。示例:。这个节点集也存储在一个变量中。如何选择具有相同名称的子元素。示例:。这个节点集也存储在一个变量中。