Ruby 让Nokogiri将xmlns视为普通属性?
我知道如何使用Nokogiri中的名称空间,但有时,我想看看文档实际上是如何指定的 在这些情况下,如果Nokigiri可以简单地表现为对名称空间一无所知,像对待任何其他属性一样对待“xmlns”,并像对待元素一样对待它们的名称(冒号和全部,如果存在的话)和默认名称空间中的所有元素,那就太好了 有没有办法做到这一点 编辑:添加示例 假设我使用Nokogiri检查生成的SVG。我想知道名称空间是使用xmlns属性在根元素中指定的,我想知道子元素使用隐式名称间距Ruby 让Nokogiri将xmlns视为普通属性?,ruby,xml,xml-parsing,nokogiri,Ruby,Xml,Xml Parsing,Nokogiri,我知道如何使用Nokogiri中的名称空间,但有时,我想看看文档实际上是如何指定的 在这些情况下,如果Nokigiri可以简单地表现为对名称空间一无所知,像对待任何其他属性一样对待“xmlns”,并像对待元素一样对待它们的名称(冒号和全部,如果存在的话)和默认名称空间中的所有元素,那就太好了 有没有办法做到这一点 编辑:添加示例 假设我使用Nokogiri检查生成的SVG。我想知道名称空间是使用xmlns属性在根元素中指定的,我想知道子元素使用隐式名称间距 <svg version="1.
<svg version="1.1" width="300" height="200" xmlns="http://www.w3.org/2000/svg">
<path d="M 10,10 l 5,20" />
</svg>
这表明该文件在生成具有预期名称空间的元素方面是“正确的”,但不让我知道该名称空间是如何指定的
如果我可以得到一个完全不知道名称空间的文档实例,那么
我可以使用svg\u doc.root['xmlns']
查询“xmlns”属性值
我可以发现“svg”根元素有一个“path”元素子元素,并且两个元素都没有使用svg\u doc.xpath('//svg/path')的名称空间限定符前缀。
中的“名称空间”部分是关于使用CSS选择器的部分:
不过别上当了。您不必使用XPath来获得名称空间的好处。CSS选择器也可以使用。CSS只是使用管道符号来表示名称空间搜索
让我们看看之前的搜索重写为使用CSS:
@doc.css('xmlns | title')#=>[“示例提要”,“原子动力机器人疯狂运行”]
在使用CSS时,如果名称空间称为“xmlns”,甚至可以省略名称空间名称。这意味着您的CSS将减少到:
@doc.css('title')#=>[“示例提要”,“原子能机器人疯狂运行”]
您需要举例说明如何搜索。Nokogiri完全支持你所描述的。
svg_doc.xpath('//ns:svg/ns:path', 'ns' => "http://www.w3.org/2000/svg")
@doc.css('xmlns|title') # => ["<title>Example Feed</title>", "<title>Atom-Powered Robots Run Amok</title>"]
@doc.css('title') # => ["<title>Example Feed</title>", "<title>Atom-Powered Robots Run Amok</title>"]