저는 XSLT에서 새로운 꿀벌입니다. 하지만 아래의 요구 사항은 XSLT를 사용하여 달성 할 수 있습니다. 이제 두 개의 다른 xml을 하나로 병합해야하는 요구 사항이 있으며 xslt가 node1과 node1과 같은 노드 이름을 확인할 수 있어야합니다. input2/nodeName과 일치하면 input2에서 값을 채울 필요가 있습니다.xslt를 사용하여 두 xml 노드 값 병합 및 업데이트
예 :
입력 1 XML :
<Parent>
<C1>123</C1>
<C2>Incorrect data</C2>
<C3>789</C3>
</Parent>
입력 2의 XML :
<NewParent>
<C2>CorrectData</C2>
</NewParent>
출력은 : I가 모두 합류 XSLT 이하 시도
<Parent>
<C1>123</C1>
<C2>CorrectData</C2>
<C3>789</C3>
</Parent>
있어야 그러나 해결책을 찾지 못했습니다.
<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>
이며 스타일 시트가 일부 노드 세트 오류로 종료됩니다.
참고 : 결과를 얻으려면 nodeName (예 : c1, c2)을 지정하지 말고 XSLT 코드에서 위치를 지정하지 마십시오. 그것은 일반적이어야합니다.
추가 정보가 필요하면 알려주십시오. 그리고 제 질문이 명확하지 않은지 알려주세요.
이 서식 도움을 살펴 보시기 바랍니다. –
직접 구현하기 전에 Oliver Becker의 병합 알고리즘을 사용해보십시오. https://www2.informatik.hu-berlin.de/~obecker/XSLT/merge/merge.xslt.html. –