我正在嘗試從 XML 檔案的節點創建單個檔案。我的問題是無論我以何種方式嘗試它,我似乎都陷入了嵌套回圈,我要么不斷重寫每個檔案,直到它們一遍又一遍地成為相同的節點資料,要么我運行每個回圈實體的所有節點。我敢肯定這應該很容易,但我在某個地方被掛斷了。
doc = Nokogiri::XML(open("original_copy_mod.xml"))
doc.xpath("//nodes/node").each do |item|
item.xpath("//div[@class='meeting-date']/span/@content").each do |date|
date = date.to_s
split_date = date.split('T00')
split_date = split_date[0].gsub("-","_")
split_date = split_date ".pcf"
File.open(split_date,'w'){ |f| f.write(item)}
end
end
這是我不明白為什么無法創建所有頁面的另一種嘗試。這只會創建一頁,但如果我使用“puts”,則計數會遍歷所有 101 個節點。
doc = Nokogiri::XML(open("original_copy_mod.xml"))
doc.xpath("//nodes/node").each do |item|
date = item.xpath("//no-name/div[@class='meeting-date']/span/@content").to_s
split_date = date.split('T00')
split_date = split_date[0].gsub("-","_")
split_date = split_date ".pcf"
File.open(split_date,'w'){ |f| f.write(item)}
end
為了進一步說明,這是我嘗試在頁面中創建的節點的示例。
<?xml version="1.0" encoding="UTF-8" ?>
<nodes>
<node>
<no-name><div class="meeting-title">Meeting-a</div>
<div class="meeting-date"><span class="date-display-single" property="dc:date" datatype="xsd:dateTime" content="a-2021-11-29T00:00:00-06:00">Monday, November 29, 2021</span></div>
</no-name>
<no-name><div class="past-mtg-icons">
<div>
<span><a href="/final.pdf" target="_blank"><img src="agenda-icon.svg"/></a></span>
<span><a href="final.pdf" target="_blank">Agenda</a></span>
</div>
<div>
<span><a href="https://9949973" target="_blank"><img src="webcast-icon.svg"/></a></span>
<span><a href="https://9949973" target="_blank">11/29</a></span>
</div>
</div>
<div class="meeting-body"></div></no-name>
</node>
<node>
<no-name><div class="meeting-title">Meeting-b</div>
<div class="meeting-date"><span class="date-display-single" property="dc:date" datatype="xsd:dateTime" content="e-2021-09-10T00:00:00-05:00">Friday, September 10, 2021</span></div>
</no-name>
<no-name><div class="past-mtg-icons">
<div>
<span><a href="/final.pdf" target="_blank"><img src="agenda-icon.svg"/></a></span>
<span><a href="final.pdf" target="_blank">Agenda</a></span>
</div>
<div>
<span><a href="https://9949973" target="_blank"><img src="webcast-icon.svg"/></a></span>
<span><a href="https://9949973" target="_blank">11/29</a></span>
</div>
</div>
<div class="meeting-body"></div></no-name>
</node>
<node>
<no-name><div class="meeting-title">Meeting-c</div>
<div class="meeting-date"><span class="date-display-single" property="dc:date" datatype="xsd:dateTime" content="f-2021-08-13T00:00:00-05:00">Friday, August 13, 2021</span></div>
</no-name>
<no-name><div class="past-mtg-icons">
<div>
<span><a href="/final.pdf" target="_blank"><img src="agenda-icon.svg"/></a></span>
<span><a href="final.pdf" target="_blank">Agenda</a></span>
</div>
<div>
<span><a href="https://9949973" target="_blank"><img src="webcast-icon.svg"/></a></span>
<span><a href="https://9949973" target="_blank">11/29</a></span>
</div>
</div>
<div class="meeting-body"></div></no-name>
</node>
</nodes>
uj5u.com熱心網友回復:
date = item.xpath("//no-name/div[@class='meeting-date']/span/@content").to_s
通過使用//,您將超出您正在迭代的節點的范圍。洗掉斜杠可以保留節點的范圍。
date = item.xpath("no-name/div[@class='meeting-date']/span/@content").to_s
uj5u.com熱心網友回復:
當您使用w選項時,它總是重寫到檔案上。您需要的是創建或附加到檔案,它是通過a選項完成的。所以你可以試試這個:
File.open(split_date,'a'){ |f| f << item }
PS。確保 split_date 作為檔案名對于每個節點都是唯一的,因為您希望每個節點都有一個單獨的檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/415028.html
標籤:
