Я новичок в XSLT. Но я считаю, что приведенное ниже требование может быть достигнуто с помощью XSLT :) Теперь у меня есть требование, когда мне нужно объединить 2 разных xml в один, и должна быть проверка, где xslt должен быть способен проверять имя узла, например, если input1/nodeName соответствует input2/nodeName, тогда значение должно быть заполнено из input2.
Например:
Ввод1 xml:
<Parent>
<C1>123</C1>
<C2>Incorrect data</C2>
<C3>789</C3>
</Parent>
Вход2 xml:
<NewParent>
<C2>CorrectData</C2>
</NewParent>
Вывод: должно быть
<Parent>
<C1>123</C1>
<C2>CorrectData</C2>
<C3>789</C3>
</Parent>
Я попытался ниже XSLT объединить оба, но не нашел решения.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="input1" select="input1.xml" />
<xsl:param name="input2" select="input2.xml" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:copy>
<xsl:for-each select="/*">
<xsl:choose>
<xsl:when
test="$input1//node() = $input2//node()">
<xsl:value-of select="$input2/node()" />
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="@* | node()" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
и таблица стилей завершается с некоторой ошибкой набора узлов.
Примечание. Чтобы получить результат, мы не должны указывать имя узла (например, c1, c2) нигде в коде XSLT. Он должен быть общим.
Пожалуйста, дайте мне знать, если потребуется дополнительная информация. А также дайте мне знать, если мой вопрос не ясен.