У меня есть пример XML-файл:XSL копия, если атрибут текущего узла равен приписывать другой узел
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<MetaData>
<Ref MDID='ID'></Ref>
</MetaData>
<MetaData2>
<Ref MDID='ID2'></Ref>
</MetaData2>
<Items ID='ID'>
<Item OID='haveit'></Item>
<Item OID='ornot'></Item>
</Items>
<Items ID= ID2'>
<Item OID='ornot'></Item>
<Item OID='ornot'></Item>
</Items>
</XML>
я должен преобразовать его так, что я получаю следующий результат.
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<MetaData>
<Ref MDID='ID'></Ref>
</MetaData>
<Items ID='ID'>
<Item OID='haveit'></Item>
</Items>
</XML>
Так что сначала я должен проверить, существует ли элемент 'hasit'. Затем я копирую соответствующий родительский элемент «Item». Затем мне нужно скопировать MetaData где MDID равна Items ID (в данном случае «ID», но я не знаю точное значение в моем реальном примере) То, что я до сих пор:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:variable name="Item" select = "'haveit'"/>
<xsl:template match="XML">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="Items">
<xsl:if test="child::Item[@OID = $Item]">
<xsl:copy>
<xsl:copy-of select="@*" /> <!-- copy attributes -->
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
С помощью этого кода я могу скопировать элемент, который я хочу, и соответствующий элемент элементов. Теперь я не знаю, как получить правильный элемент MetaData. Как проверить, имеет ли MDID Ref значение такое же значение, что и ID элемента?
Действительно ли элементы, названные '' MetaData' и MetaData2'? –
Используете ли вы процессор XSLT 1.0 или 2.0? –
Я использую XSLT 2.0. Да, это всего лишь пример реальных данных, которые у меня есть, но да, это выглядит так! –