xmlファイルはhttps://gist.github.com/1966260です。nokogiriを使用してスキーマ要素をXMLファイルにダンプする方法は?
スキーマ要素(xs:element)をダンプします。
私が試してみてください。
doc.xpath("//xs:element")
doc.xpath("//element")
doc.xpath("element")
はいけない仕事....
任意のアドバイスはありますか?
xmlファイルはhttps://gist.github.com/1966260です。nokogiriを使用してスキーマ要素を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')
私はわからないんだけど、まだこれは鋸山または意図した動作とバグであれば、それはメーリングリストで議論または作成する価値があると思いますの問題。
@BenTaitelbaumこれは、意図された動作です。 http://nokogiri.org/Nokogiri/XML/Node.html#method-i-xpath。
異なるドキュメントでは、同じ名前空間に対して異なる接頭辞を付けることができます。たとえば、このドキュメントでは、「http://www.w3.org/2001/XMLSchema」の名前空間接頭辞として「xs」を使用しています。しかし、他の文書では代わりに "xmls"を使用することがあります。名前空間マッピングを提供することにより、xpath
メソッドは、接頭辞が異なっていても、 'http://www.w3.org/2001/XMLSchema'名前空間にあるノードを常に見つけます。 URLは普遍的にユニークですが、接頭辞は衝突しない可能性がありますし、すべてのノードのURLを使用するのは面倒で退屈です。
良い読み物:http://tenderlovemaking.com/2009/04/23/namespaces-in-xml/
あなたの方法は、健康的な/良い/権利です。しかし完全性の精神の中で、日陰であなたを傷つける可能性のあるオプションがあります:
URLではなく名前空間プレフィックスで照会したい場合は、collect all the namespaces予め。あなたは完全に、おそらく悪い考えである名前空間を(無視する場合(これは文書マップ1対1の接頭辞内のURLあればそうでない場合は、これは失敗する可能性があります。作品)
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