![](/img/trans.png)
[英]How to merge only selected lines of two different xml files into single xml file using python?
[英]How to merge two different paths in a XML file?
這是我的xml文件:
<File>
<Paths>
<Path>
<Node>
<NodeName>Initial_Node</NodeName>
<InnerNode>
<Signal>Test_sig</Signal>
<InnerNode>
<Signal>Test_sig_1</Signal>
<NodeRef>Ref0</NodeRef>
</InnerNode>
</InnerNode>
</Node>
</Path>
<Path>
<Node>
<NodeName>Name1</NodeName>
<InnerNode>
<Signal>Test_sig_0</Signal>
<InnerNode>
<Signal>Test_sig_2</Signal>
<NodeRef>Ref1</NodeRef>
</InnerNode>
</InnerNode>
</Node>
</Path>
</Paths>
<Paths>
<Path>
<Node>
<NodeRef>Ref0</NodeRef>
<InnerNode>
<Signal>Test_sig_3</Signal>
<InnerNode>
<Signal>Test_sig_4</Signal>
<NodeName>Final_Node</NodeName>
</InnerNode>
</InnerNode>
</Node>
</Path>
</Paths>
</File>
我在Python中使用lxml。 我希望能夠在上面的文件中附加匹配的<NodeRef>
,然后將其余兩個匹配路徑合並在一起以得到以下結果:
<File>
<Paths>
<Path>
<Node>
<NodeName>Initial_Node</NodeName>
<InnerNode>
<Signal>Test_sig</Signal>
<InnerNode>
<Signal>Test_sig_1</Signal>
<InnerNode>
<Signal>Test_sig_3</Signal>
<InnerNode>
<Signal>Test_sig_4</Signal>
<NodeName>Final_Node</NodeName>
</InnerNode>
</InnerNode>
</InnerNode>
</InnerNode>
</Node>
</Path>
<Path>
<Node>
<NodeName>Name1</NodeName>
<InnerNode>
<Signal>Test_sig_0</Signal>
<InnerNode>
<Signal>Test_sig_2</Signal>
<NodeRef>Ref1</NodeRef>
</InnerNode>
</InnerNode>
</Node>
</Path>
</Paths>
</File>
非常感謝您的幫助
因此,這里沒有太多細節可做,但這至少可以給出正確的輸出:
from lxml import etree
root = etree.fromstring(xml)
replace_set = {}
for node in root.iter("Node"):
if 'NodeRef' in [c.tag for c in node]:
# This is a <Node> type with child element <NodeRef>. So it will
# be referenced by a <Node> with <NodeName>. Let's keep it, and then
# remove it from the tree.
ref = node.find("NodeRef").text
inner = node.find("InnerNode")
replace_set[ref] = inner
# Remove NodeRef element, as we've saved it in dict
node.getparent().remove(node)
# Cleanup where we've removed NodeRefs.
for node in root.iter("Paths"):
if len(node.find("Path")) == 0:
node.getparent().remove(node)
# Replace references to NodeRefs
for node in root.iter("NodeRef"):
if node.text in replace_set:
node.getparent().replace(node, replace_set[ref])
print etree.tostring(root)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.