1

这段代码没有给出想要的结果。请帮忙。这段代码没有给出想要的结果。请帮忙。这段代码没有给出想要的结果。请帮忙。

 <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>

期望输出:

 <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>

但是上面的代码没有给出想要的结果。请帮忙。但是上面的代码没有给出想要的结果。请帮忙。但是上面的代码没有给出想要的结果。请帮忙。

4

2 回答 2

1

假设您使用 XSLT 2.0 处理器,您可以使用 XPath 访问变量的内容,但您需要在for-each例如

<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.

于 2013-07-12T13:59:55.373 回答
0

在 XSLT 1.0 中,您这样输出的 XML 就是所谓的结果树片段。它不是节点集,因此不能在 XPath 选择中使用它。基本上,您唯一能做的就是将其复制到结果文档中。(谢天谢地,XSLT 2.0 修复了这个愚蠢的问题。)

但是,如果您的 XSLT 处理器支持 EXSLT 扩展,则可以使用 exsl:node-set 将结果树片段转换为节点集。http://exslt.org/exsl/functions/node-set/index.html

<xsl:for-each select="exsl:node-set($Resp)/Response/RespRec/Data">

确保在某处声明 exsl 命名空间前缀,最好是在 xsl:stylesheet 元素上。

xmlns:exsl="http://exslt.org/common"

此外,您的 xsl:value-of 语句不会执行您希望它们执行的操作。当您在 xsl:for-each 循环中时,上下文节点是一个数据节点。然后,您尝试从顶部再次选择,而不仅仅是选择子元素。将它们更改为如下所示:

<A1>
  <xsl:value-of select="A1" />
</A1>
于 2013-07-12T13:59:44.570 回答