簡體   English   中英

在Marklogic中使用XQuery的XML差異

[英]XML difference using xquery in marklogic

我正在Xquery中尋找類似的XML差異算法,該算法與Java中的xdiff.jar相似。 在傳遞2個遵循相同模式的XML文檔時,我希望Xquery指定已添加的節點/元素是什么,以及刪除或修改的節點/元素是什么。 序列中的任何更改都將被忽略。 我要說的是我希望兩個XML文檔之間在邏輯上有所不同。

例如。 可以說XML A是XML的初始版本,而XML B是XML A的更新版本,我應該能夠准備一份報告,我應該能夠找到所有已添加的新XML標記的報告。 ,已修改了哪些XML標簽以及已刪除了哪些XML標簽。

對於該特定用例,您可以嘗試使用xdmp:path加上傳統LCS diff的方法。 xdmp:path代碼將產生一系列唯一的路徑,將它們進行比較將向您顯示哪些路徑是新的或刪除的。

這是生成LCS差異輸入的方法:這將返回$input中每個唯一的非位置XPath的有序序列。

for $path in distinct-values(
  for $p in xdmp:path($input/descendant-or-self::*)
  return replace($p, '\[\d+\]', ''))
order by $path
return $path

對這兩個序列進行比較可以顯示出哪些路徑已更改。

在XQuery中實現LCS差異很復雜,因為LCS的常規實現使用二維數組,而XQuery沒有二維數組。 您可以使用一個json:array來模擬二維json:array 有關該算法的更多信息,請參見http://en.wikipedia.org/wiki/Diffhttp://en.wikipedia.org/wiki/Longest_common_subsequence_problem

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM