我知道這裏有幾個xml/xslt合併相關的問題,但似乎沒有解決我的問題。XSLT合併2 XML文件
我尋找是一個XSLT(儘可能的通用 - 與輸入XML文件的結構不緊),它可以
合併A.XML與B.XML和產生c.xml這樣的方式該
- c.xml將包含A.XML和B.XML之間的公共節點(與該節點從A.XML採取 值)
- 除了c.xml將包含節點(和值)它們存在於b.xml而不是a.xml中
例如:合併A.XML:
<root_node>
<settings>
<setting1>a1</setting1>
<setting2>a2</setting2>
<setting3>
<setting31>a3</setting31>
</setting3>
<setting4>a4</setting4>
</settings>
</root_node>
與B.XML:
<root_node>
<settings>
<setting1>b1</setting1>
<setting2>b2</setting2>
<setting3>
<setting31>b3</setting31>
</setting3>
<setting5 id="77">b5</setting5>
</settings>
</root_node>
將生成c.xml:
<root_node>
<settings>
<setting1>a1</setting1>
<setting2>a2</setting2>
<setting3>
<setting31>a3</setting31>
</setting3>
<setting5 id="77">b5</setting5>
</settings>
附加信息
我會盡力解釋我所瞭解的「共同節點」。這可能不是一個準確的xml/xslt定義 因爲我不是任何專家。
一個/root_node /設置/ 設置1是一個 「公共節點」 與b/root_node /設置/ 設置1由於2個節點使用相同的路徑到達。 setting2和setting3也一樣。
的2 「非公共節點」 是一個/root_node /設置/ setting4其僅在A.XML 實測值(它不應該在輸出來)和b/root_node /設置/ setting5它只在b.xml中找到(它應該進入輸出)。
通過「通用解決方案」我不是指任何可以工作在輸入XML格式的任何格式的東西。我的意思是,xslt不應該包含硬代碼xpaths,而您可能會添加像「只有當a.xml中的節點是唯一的」這樣的限制,或者您認爲適合的任何其他限制。
有沒有什麼特別的原因setting4是不存在的輸出?從這個例子中很難推斷出轉換規則,特別是因爲你已經說過你希望轉換一般適用於很多其他輸入。你需要嘗試解釋一般規則。 – 2012-07-26 11:42:10
您是否看到子彈點?這就是我試圖用2個子彈做的事情 - >解釋一般規則。 – Doru 2012-07-26 12:01:50
Doru,請編輯問題並精確定義「常見節點」的含義。在目前的形式下,如果沒有這樣的定義,這個問題就太模棱兩可了,並且會得到來自N個讀者的N +解釋,他們不明智地決定給出答案。標題中的「聯合」一詞也具有誤導性 - 從問題文本看來,這裏似乎不需要聯合操作 - 因爲只有「常見」元素(無論這意味着什麼)應該被複制,並且只能從Doc1中複製。 – 2012-07-26 12:18:58