Я новичок в 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>
Вот 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>
VECTOR TAG содержит несколько узлов CLASS «12345» и «54321».
ЭЛЕМЕНТ 1 первого КЛАССА должен совмещаться с ЭЛЕМЕНТОМ 1 второго КЛАССА.