Я новичок в XSLT и столкнулся с типичной проблемой.Ниже подробно описана проблема.Мне нужен результат из ItemB (столько раз, сколько ItemB), где атрибут BNum id сопоставляется с идентификатором ANum, а на выходе будет конкатенация атрибута VAR1 id и ANum id.
Зацикливание объектов - главная проблема, с которой я сталкиваюсь.
Пример ввода:
<?xml version="1.0" encoding="UTF-8"?>
<myData>
<ItemA>
<VAR1 id="1234">
<ANum id = "3333"/>
<ANum id = "5555"/>
<ANum id = "6666"/>
</VAR1>
<VAR1 id="7B62">
<ANum id = "4444"/>
</VAR1>
</ItemA>
<ItemB>
<BNum id = "6666"/>
</ItemB>
<ItemB>
<BNum id = "4444"/>
</ItemB>
</myData>
Желаемый вывод:
<?xml version="1.0" encoding="UTF-8"?>
<result>
<ItemC>
<CNum id = "1234-6666"/>
</ItemC>
<ItemC>
<CNum id = "7B62-4444"/>
</ItemC>
</result>
Я пытался скод ниже -
<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<result>
<xsl:for-each select="myData/ItemB">
<ItemC>
<CNum>
<xsl:value-of select="BNum"/>
<xsl:if test="../ItemA/VAR1/ANum/@id = BNum/@id">
<xsl:attribute name="id">
<xsl:value-of select="concat(../ItemA/VAR1/@id,'-',BNum/@id)"/>
</xsl:attribute>
</xsl:if>
</CNum>
</ItemC>
</xsl:for-each>
</result>
</xsl:template>
</xsl:stylesheet>
И я получаю вывод как -
<?xml version="1.0" encoding="UTF-8"?>
<result>
<ItemC>
<CNum id = "1234-6666"/>
</ItemC>
<ItemC>
<CNum id = "1234-4444"/>
</ItemC>
</result>
Последнее значение ItemC неверно и нуждается в помощи в его исправлении.