我有一個這樣的xml文件:https://gist.github.com/1966260。如何使用nokogiri將schema元素轉儲爲一個xml文件?
我想轉儲架構元素(xs:element)。
我嘗試:
doc.xpath("//xs:element")
doc.xpath("//element")
doc.xpath("element")
不工作....
什麼建議嗎?
感謝
我有一個這樣的xml文件:https://gist.github.com/1966260。如何使用nokogiri將schema元素轉儲爲一個xml文件?
我想轉儲架構元素(xs:element)。
我嘗試:
doc.xpath("//xs:element")
doc.xpath("//element")
doc.xpath("element")
不工作....
什麼建議嗎?
感謝
這工作:
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::XML(open('https://raw.github.com/gist/1966260/8769a795b2ba83ceea6aaa45365b01cf344087b0/gistfile1.xml'))
doc.xpath('//xs:schema', 'xs' => 'http://www.w3.org/2001/XMLSchema')
我還沒有確定這是否是與引入nokogiri或預期的行爲的錯誤,但它會是值得討論的郵件列表或創建一個問題。
@BenTaitelbaum這是預期的行爲。 http://nokogiri.org/Nokogiri/XML/Node.html#method-i-xpath。
不同的文檔可以爲相同的命名空間提供不同的前綴。例如,本文檔使用「xs」作爲「http://www.w3.org/2001/XMLSchema」的命名空間前綴。但其他一些文檔可能會使用「xmls」。通過提供名稱空間映射,即使前綴不同,xpath
方法也會始終找到位於'http://www.w3.org/2001/XMLSchema'名稱空間中的節點。他們這樣做是因爲URL是普遍唯一的,但是前綴不是並且可能會發生衝突,並且在每個節點上使用URL都是單調乏味的,而不是XML曾經與那個(zing)有過矛盾。
很好看的:http://tenderlovemaking.com/2009/04/23/namespaces-in-xml/
你的方法是正確的/好/健康。但本着完整的精神,這裏有一些其他的選項是陰暗的,可能會傷害到你:
如果你想通過命名空間前綴而不是URL來查詢(這可能是一個壞主意),你可以collect all the namespaces預先。如果你想完全忽略命名空間(這可能是一個壞主意(這隻能如果文檔結構圖1對1前綴的網址。如果他們不這樣做,這可能會失敗)
doc = Nokogiri::XML(open(the_url))
namespaces = doc.collect_namespaces
doc.xpath('//xs:schema', namespaces)
),你可以remove them entirely。
doc = Nokogiri::XML(open(the_url))
doc.remove_namespaces!
doc.xpath('//schema')
它的工作原理!謝謝 :) – CrazyLion 2012-03-03 17:04:25