我知道这里有几个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