我正在使用Nokogiri解析document.xml文件,从.docx文件中提取,需要获得具有名称的属性值,如" w:val
"。
这是源XML的一个示例:
<w:document>
<w:body>
<w:p w:rsidR="004D5F21" w:rsidRPr="00820E0B" w:rsidRDefault="00301D39" pcut:cut="true">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
</w:body>
</w:document>
下面是一个示例代码:
require 'nokogiri'
doc = Nokogiri::XML(File.open(path))
doc.search('//w:jc').each do |n|
puts n['//w:val']
end
控制台中没有任何内容,只有空行。我怎样才能得到属性的值?
require 'nokogiri'
doc = Nokogiri::XML(File.open(path))
doc.xpath('//jc').each do |n|
puts n.attr('val')
end
应该工作。不要忘记查看文档:http://nokogiri.org/tutorials/searching_a_xml_html_document.html#fn:1
文档缺少名称空间声明,Nokogiri对此不满意。如果检查doc
的errors
方法,您将看到如下内容:
通过使用Nokogiri的CSS访问器,而不是XPath,您可以绕过名称空间问题:
puts doc.at('jc')['val']
将输出:
center
如果您需要遍历多个jc
节点,请使用search
或其别名之一或类似行为的方法,类似于您之前所做的。
Show there:
require 'nokogiri'
doc = Nokogiri::XML(File.open(path))
doc.search('jc').each do |n|
puts n['val']
end
还有,是的,读这个:http://nokogiri.org/tutorials/searching_a_xml_html_document.html#fn:1