Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT转换多个子元素的嵌套循环_Xml_Xslt - Fatal编程技术网

Xml XSLT转换多个子元素的嵌套循环

Xml XSLT转换多个子元素的嵌套循环,xml,xslt,Xml,Xslt,我不熟悉XSLT转换。我被一个循环的问题困住了,需要团队的指导 这是我的XML: <OUTPUT> <VECTOR ID="6"> <ELEMENT ID="1"> <CLASS ID="12345"> <OWNR_EMP>EMP1</OWNR_EMP> <OWNR_EMP_NUM>XXXX</O

我不熟悉XSLT转换。我被一个循环的问题困住了,需要团队的指导

这是我的XML:

<OUTPUT>
    <VECTOR ID="6">
        <ELEMENT ID="1">
            <CLASS ID="12345">
                <OWNR_EMP>EMP1</OWNR_EMP>
                <OWNR_EMP_NUM>XXXX</OWNR_EMP_NUM>
            </CLASS>
        </ELEMENT>
        <ELEMENT ID="2">
            <CLASS ID="12345">
                <OWNR_EMP>EMP2</OWNR_EMP>
                <OWNR_EMP_NUM>YYYY</OWNR_EMP_NUM>
            </CLASS>
        </ELEMENT>
    </VECTOR>
    <VECTOR ID="6">
        <ELEMENT ID="1">
            <CLASS ID="54321">
                <EMP_ID>EMP1</EMP_ID>
                <EMP_DTLS>DTLS1</EMP_DTLS>
            </CLASS>
        </ELEMENT>
        <ELEMENT ID="2">
            <CLASS ID="54321">
                <EMP_ID>EMP2</EMP_ID>
                <EMP_DTLS>DTLS2</EMP_DTLS>
            </CLASS>
        </ELEMENT>
    </VECTOR>
</OUTPUT> 

EMP1
XXXX
EMP2
YYYY
EMP1
DTLS1
EMP2
DTLS2
以下是我尝试的XSLT:

<xsl:for-each select="/OUTPUT/VECTOR/ELEMENT">

<xsl:variable name="empid_1"  select="CLASS/OWNR_EMP" />

<xsl:for-each select="CLASS">

<xsl:variable name="classid_2"  select="@ID" />

<xsl:if test="string($classid_2) = '12345' ">

<xsl:variable name="empid_2" select="OWNR_EMP" />

<xsl:if test="string($empid_2) = string($empid_1) ">

<EMP>

<OWNR_EMP><xsl:value-of select="OWNR_EMP" /></OWNR_EMP>

<OWNR_EMP_NUM><xsl:value-of select="OWNR_EMP_NUM" /></OWNR_EMP_NUM>

</EMP>

</xsl:if>

</xsl:if>

 <xsl:if test="string($classid_2) = '54321' ">

<xsl:variable name="empid_3" select="EMP_ID" />

<xsl:if test="string($empid_3) = string($empid_1) ">

<EMP_DETAIL>

<EMP_ID><xsl:value-of select="EMP_ID" /></EMP_ID>

<EMP_DTLS><xsl:value-of select="EMP_DTLS" /></EMP_DTLS>

</EMP_DETAIL>

</xsl:if>

</xsl:if>

</xsl:for-each>

</xsl:for-each>

我的期望输出:

<OUTPUT>
    <EMPLOYEE>
        <EMP>
            <OWNR_EMP>EMP1</OWNR_EMP>
            <OWNR_EMP_NUM>XXXX</OWNR_EMP_NUM>
        </EMP>
        <EMP_DETAIL>
            <EMP_ID>EMP1</EMP_ID>
            <EMP_DTLS>DTLS1</EMP_DTLS>
        </EMP_DETAIL>
    </EMPLOYEE>
    <EMPLOYEE>
        <EMP>
            <OWNR_EMP>EMP2</OWNR_EMP>
            <OWNR_EMP_NUM>YYYY</OWNR_EMP_NUM>
        </EMP>
        <EMP_DETAIL>
            <EMP_ID>EMP2</EMP_ID> 
            <EMP_DTLS>DTLS2</EMP_DTLS>
        </EMP_DETAIL>
    </EMPLOYEE>
</OUTPUT>

EMP1
XXXX
EMP1
DTLS1
EMP2
YYYY
EMP2
DTLS2
VECTOR标记包含类“12345”和“54321”的多个节点


第一类的元素1应该与第二类的元素1结合起来。

您可以通过编辑您的问题来帮助我们显示您当前尝试过的任何XSLT。非常感谢。你说你被卡住了,我们很高兴帮助你摆脱困境,但我们不知道你被困在哪里,所以除了为你编写代码(这不是一种很好的教学方式),我们很难提供帮助。记住:StackOverflow是关于问题和答案的。你需要问一个问题,而不仅仅是请求帮助。这个例子模棱两可。请详细解释此处需要应用的逻辑。您可能会被卡住,因为您正在以一种紧迫的方式处理问题;很多如果和循环。声明性方法可能更合适。查看xsl:template和xsl:apply模板。稍后我将尝试添加一个示例。