I am trying to merge 2 XML files that first of all i need to compare nodes of both files according to 2 attributes in the nodes. If those 3 attributes are equal, i need to replace the existing node with the new one. For example first xml file will be like;
Expand|Select|Wrap|Line Numbers
- <Root>
- <Node Id ="1" FormId="form1" Value="value1"/>
- <Node Id ="2" FormId="form1" Value="value2"/>
- <Node Id ="3" FormId="form1" Value="value3"/>
- </Root>
Expand|Select|Wrap|Line Numbers
- <Root>
- <Node Id ="1" FormId="form1" Value="NewValue1"/>
- <Node Id ="2" FormId="form1" Value="NewValue2"/>
- <Node Id ="4" FormId="form1" Value="NewValue4"/>
- </Root>
Expand|Select|Wrap|Line Numbers
- <Root>
- <Node Id ="1" FormId="form1" Value="NewValue1"/>
- <Node Id ="2" FormId="form1" Value="NewValue2"/>
- <Node Id ="3" FormId="form1" Value="value3"/>
- <Node Id ="4" FormId="form1" Value="NewValue4"/>
- </Root>
Expand|Select|Wrap|Line Numbers
- <xsl:for-each select="$node1/@*">
- <xsl:if test="not($node2/@* [local-name()=local-name(current()) and namespace-uri()=namespace-uri(current()) and .=current()])">.</xsl:if>
- </xsl:for-each>
Expand|Select|Wrap|Line Numbers
- <xsl:for-each select="$node1/@*">
- <xsl:if test="not($node2/@* [@Id = current()/@Id and @FormId = current()/@FormId])">.</xsl:if>
- </xsl:for-each>