後,我有一個XML文件,如下 propNode.xml合併使用XSLT兩個XML文件中讀取第三xml文件
<NODES>
<NODE>
<NODELINE CLASS="Item" TYPE="Item" >
<ATTR_NODES>
<ATTR_NODE NAME="myName" />
<ATTR_NODE NAME="myDesc />
</ATTR_NODES>
</NODELINE>
<NODELINE CLASS="Item1" TYPE="Item1" >
<ATTR_NODES>
<ATTR_NODE NAME="myName1" />
<ATTR_NODE NAME="myDesc1" />
</ATTR_NODES>
</NODELINE>
<NODELINE CLASS="Item2" TYPE="Item2" >
<ATTR_NODES>
<ATTR_NODE NAME="myName2" />
<ATTR_NODE NAME="myDesc2" />
</ATTR_NODES>
</NODELINE>
</NODE>
</NODES>
我想讀這個XML和使用它,我需要合併以下兩個XML文件 source.xml
<NODES>
<NODE>
<NODELINE CLASS="Item" TYPE="Item" >
<ATTR_NODES>
<ATTR_NODE NAME="myName" VALUE="myNameValue" />
<ATTR_NODE NAME="myDesc" VALUE="test-myDescValue" />
<ATTR_NODE NAME="myId" VALUE="test-myIdValue" />
</ATTR_NODES>
</NODELINE>
<NODELINE CLASS="Item1" TYPE="Item1" >
<ATTR_NODES>
<ATTR_NODE NAME="myName1" VALUE="myNameValue1" />
<ATTR_NODE NAME="myDesc1" VALUE="myDescValue1"/>
<ATTR_NODE NAME="myId1" VALUE="myIdValue1" />
</ATTR_NODES>
</NODELINE>
<NODELINE CLASS="Item2" TYPE="Item2" >
<ATTR_NODES>
<ATTR_NODE NAME="myName2" VALUE="test-myNameValue2" />
<ATTR_NODE NAME="myDesc2" VALUE="myDescValue2"/>
<ATTR_NODE NAME="myId2" VALUE="test-myIdValue2" />
</ATTR_NODES>
</NODELINE>
</NODE>
</NODES>
而且target.xml
<NODES>
<NODE>
<NODELINE CLASS="Item" TYPE="Item" >
<ATTR_NODES>
<ATTR_NODE NAME="myName" VALUE="myNameValue" />
<ATTR_NODE NAME="myDesc" VALUE="myDescValue" />
<ATTR_NODE NAME="myId" VALUE="myIdValue" />
</ATTR_NODES>
</NODELINE>
<NODELINE CLASS="Item1" TYPE="Item1" >
<ATTR_NODES>
<ATTR_NODE NAME="myName1" VALUE="myNameValue1" />
<ATTR_NODE NAME="myDesc1" VALUE="myDescValue1"/>
<ATTR_NODE NAME="myId1" VALUE="myIdValue1" />
</ATTR_NODES>
</NODELINE>
<NODELINE CLASS="Item2" TYPE="Item2" >
<ATTR_NODES>
<ATTR_NODE NAME="myName2" VALUE="myNameValue2" />
<ATTR_NODE NAME="myDesc2" VALUE="myDescValue2"/>
<ATTR_NODE NAME="myId2" VALUE="myIdValue2" />
</ATTR_NODES>
</NODELINE>
</NODE>
</NODES>
條件正在讀取propNode.xml,如果@NAME的值在source.xml和target.xml匹配,則@VALUE在source.xml和target.xml的值需要進行比較,並輸出XML應如下創建:
desiredOutput.xml
<NODES>
<NODE>
<NODELINE CLASS="Item" TYPE="Item" >
<ATTR_NODES>
<ATTR_NODE NAME="myName" SRCVALUE="myNameValue" TGTVALUE="myNameValue" ISDIFF="false" />
<ATTR_NODE NAME="myDesc" SRCVALUE="test-myDescValue" TGTVALUE="myDescValue" ISDIFF="true" />
</ATTR_NODES>
</NODELINE>
<NODELINE CLASS="Item1" TYPE="Item1" >
<ATTR_NODES>
<ATTR_NODE NAME="myName1" SRCVALUE="myNameValue1" TGTVALUE="myNameValue1" ISDIFF="false" />
<ATTR_NODE NAME="myDesc1" SRCVALUE="myDescValue1" TGTVALUE="myDescValue1" ISDIFF="false" />
</ATTR_NODES>
</NODELINE>
<NODELINE CLASS="Item2" TYPE="Item2" >
<ATTR_NODES>
<ATTR_NODE NAME="myName2" SRCVALUE="test-myNameValue2" TGTVALUE="myNameValue2" ISDIFF="true" /> />
<ATTR_NODE NAME="myDesc2" SRCVALUE="myDescValue2" TGTVALUE="myDescValue2" ISDIFF="false" />
</ATTR_NODES>
</NODELINE>
</NODE>
</NODES>
的desiredOutput.xml應從源同時包含@VALUE的值與目標如果值在propNode.xml中選擇了@NAME。如果@VALUE的值不同,@ISDIFF應該有一個值「true」或者「false」。
使用xslt可以完成整個操作嗎?就像使用propNode.xml生成xsl然後將其應用於source.xml和target.xml以生成所需的輸出一樣?這個xsl看起來怎麼樣?
你能確認propnode.xml也應該有一個''在第一個'ATTR_NODES'元件,因爲這是存在於源極在,目的地以及所需的輸出? –
StuartLC
@StuartLC是的,對不起我的壞。我現在編輯它。感謝您指出。 – MartinKahn
更新了我的xslt - 必須!=當然... – StuartLC