如何使用 Nokogiri 根据 id 将两个 XML 文件中的元素合并为一个?
How do I merge elements from two XML files into one based on id using Nokogiri?
我正在尝试根据之前提出的问题 (How do I merge two XML files into one using Nokogiri?) 进行解答,但我遇到了一些困难。
我想将 "mat" 的内容从第一个 XML 文件导入第二个 XML 文件,前提是元素 ID 匹配。这是我目前所拥有的...
require 'nokogiri'
xml1 = Nokogiri::XML('<?xml version="1.0"?>
<formX xmlns="sdu:x">
<identify>
<mat id="a">8</mat>
</identify>
<identify>
<mat id="b">7</mat>
</identify>
</formX>')
xml2 = Nokogiri::XML('<?xml version="1.0"?>
<formX xmlns="sdu:x">
<identify>
<mat id="a">9999</mat>
<name>John Smith</name>
</identify>
<identify>
<mat id="b">9999</mat>
<name>Jane Smith</name>
</identify>
</formX>')
xml2.css('mat').each do |node|
if xml2.at('mat')['id'] == xml1.at('mat')['id']
node.content = xml1.at('mat').content
end
end
puts xml2.to_xml
并且,我收到以下输出...
<?xml version="1.0"?>
<formX xmlns="sdu:x">
<identify>
<mat id="a">8</mat>
<name>John Smith</name>
</identify>
<identify>
<mat id="b">8</mat>
<name>Jane Smith</name>
</identify>
</formX>
但是,我正在拍摄...
<?xml version="1.0"?>
<formX xmlns="sdu:x">
<identify>
<mat id="a">8</mat>
<name>John Smith</name>
</identify>
<identify>
<mat id="b">7</mat>
<name>Jane Smith</name>
</identify>
</formX>
如有任何帮助,我们将不胜感激。谢谢!
您查找相同id元素的方式不对。
这有效:
xml2.css('mat').each do |node2|
xml1.css('mat').each do |node1|
if node1['id'] == node2['id']
node2.content = node1.content
end
end
end
puts xml2.to_xml
我正在尝试根据之前提出的问题 (How do I merge two XML files into one using Nokogiri?) 进行解答,但我遇到了一些困难。
我想将 "mat" 的内容从第一个 XML 文件导入第二个 XML 文件,前提是元素 ID 匹配。这是我目前所拥有的...
require 'nokogiri'
xml1 = Nokogiri::XML('<?xml version="1.0"?>
<formX xmlns="sdu:x">
<identify>
<mat id="a">8</mat>
</identify>
<identify>
<mat id="b">7</mat>
</identify>
</formX>')
xml2 = Nokogiri::XML('<?xml version="1.0"?>
<formX xmlns="sdu:x">
<identify>
<mat id="a">9999</mat>
<name>John Smith</name>
</identify>
<identify>
<mat id="b">9999</mat>
<name>Jane Smith</name>
</identify>
</formX>')
xml2.css('mat').each do |node|
if xml2.at('mat')['id'] == xml1.at('mat')['id']
node.content = xml1.at('mat').content
end
end
puts xml2.to_xml
并且,我收到以下输出...
<?xml version="1.0"?>
<formX xmlns="sdu:x">
<identify>
<mat id="a">8</mat>
<name>John Smith</name>
</identify>
<identify>
<mat id="b">8</mat>
<name>Jane Smith</name>
</identify>
</formX>
但是,我正在拍摄...
<?xml version="1.0"?>
<formX xmlns="sdu:x">
<identify>
<mat id="a">8</mat>
<name>John Smith</name>
</identify>
<identify>
<mat id="b">7</mat>
<name>Jane Smith</name>
</identify>
</formX>
如有任何帮助,我们将不胜感激。谢谢!
您查找相同id元素的方式不对。 这有效:
xml2.css('mat').each do |node2|
xml1.css('mat').each do |node1|
if node1['id'] == node2['id']
node2.content = node1.content
end
end
end
puts xml2.to_xml