XSL 2在文档节点变量内导航

时间:2014-03-04 14:11:12

标签: xslt

所以,我有两个文档节点变量,其中第一个是静态的,第二个是动态创建的。

<xsl:variable name="my_document_node_variable1" as="document-node()">
    <xsl:document>
        <root>
            <element>1</element>
            <element>2</element>
            <element>3</element>
        </root>
    </xsl:document>
</xsl:variable>

<xsl:variable name="my_document_node_variable2" as="document-node()">
    <xsl:document>
        <root>
            <xsl:for-each select="$my_document_node_variable1/root/element">
                <new_element>
                    <!-- some content here -->
                </new_element>
            </xsl:for-each>
        </root>
    </xsl:document>
</xsl:variable>

问题是:在for-each-loops中,从第二个循环开始,我想访问我在前一个循环中创建的元素,即new_element-element。

编辑:对不起,它接近它并不清楚我的意思。第二次尝试解释:

说到

<xsl:for-each select="$my_document_node_variable1/root/element">

这是第一次,一切都很好。让我们说,for-each-loop创建这样的内容:

<new_element> hi hi </new_element>

变量“my_document_node_variable2”现在应如下所示:

<root>
<new_element> hi hi </new_element>
</root>

但现在是

的第二个周期
<xsl:for-each select="$my_document_node_variable1/root/element">

我想在这里做的是:把你在前面的循环中创造的东西转换成它。 所以,我必须访问

<new_element> hi hi </new_element>

来自

<xsl:for-each select="$my_document_node_variable1/root/element">

我希望,现在很清楚。

有没有办法,或者这根本不可能?

2 个答案:

答案 0 :(得分:1)

你很亲密。您需要做的就是选择节点<xsl:value-of select="."/>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <xsl:for-each select="$my_document_node_variable2">
            <xsl:copy>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:for-each>
    </xsl:template>
    <xsl:variable name="my_document_node_variable1" as="document-node()">
        <xsl:document>
            <root>
                <element>1</element>
                <element>2</element>
                <element>3</element>
            </root>
        </xsl:document>
    </xsl:variable>
    <xsl:variable name="my_document_node_variable2" as="document-node()">
        <xsl:document>
            <root>
                <xsl:for-each select="$my_document_node_variable1/root/element">
                    <new_element>
                        <xsl:value-of select="."/>
                    </new_element>
                </xsl:for-each>
            </root>
        </xsl:document>
    </xsl:variable>
</xsl:stylesheet>

修改

我认为这就是你想要的:

<xsl:for-each select="$my_document_node_variable2">
   <xsl:copy-of select="."/>            
</xsl:for-each>

完整代码:                                                          
                                                                                 1                     2                     3                                                                                                                                                                                                                                                   

输出:

<root>
    <new_element>1</new_element>
    <new_element>2</new_element>
    <new_element>3</new_element>
</root>

修订完整代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <xsl:for-each select="$my_document_node_variable2">
            <xsl:copy-of select="."/>
        </xsl:for-each>
    </xsl:template>
    <xsl:variable name="my_document_node_variable1" as="document-node()">
        <xsl:document>
            <root>
                <element>1</element>
                <element>2</element>
                <element>3</element>
            </root>
        </xsl:document>
    </xsl:variable>
    <xsl:variable name="my_document_node_variable2" as="document-node()">
        <xsl:document>
            <root>
                <xsl:for-each select="$my_document_node_variable1/root/element">
                    <new_element>
                        <xsl:value-of select="."/>
                    </new_element>
                </xsl:for-each>
            </root>
        </xsl:document>
    </xsl:variable>
</xsl:stylesheet>

答案 1 :(得分:0)

我并不完全清楚您的要求,但一般来说,如果您使用多组节点,则需要将变量绑定到节点而不是依赖于上下文项。例如

<xsl:for-each select="$A/node-set-1">
  <xsl:variable name="N1" select="."/>
    <xsl:for-each select="$B/node-set-2">
      <xsl:variable name="N2" select=".">
         .....