我有一个这样的svg文件:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="700" width="1024" viewBox="0 0 1024 700" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd"  xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="L_691200_group">
<g id="L_691200_background">
<path stroke-width="5" fill="none" fill-rule="nonzero" stroke="black" d="..."/>
</g>
<g id="L_691200_path"><path d="..."/></g>
<g id="L_691200_icon"><circle cx="387.413" cy="485.451" r="7.99993" stroke-width="1" stroke="black"/><circle cx="478.876" cy="379.327" r="2.50001" stroke-width="1" stroke="black"/><circle cx="276.717" cy="593.047" r="2.50001" stroke-width="1" stroke="black"/></g>
<g id="L_691200_symbol">
<path fill="white" fill-rule="nonzero" d="..."/>
</g>
</g>
</svg>

我试着用Nokogiri用Ruby解析它,但是我不能得到g标记。
我尝试了各种方法:
groups = doc.xpath('//g')
groups = doc.xpath('//xmlns:g')
groups = doc.xpath('//g', 'g' => 'http://www.w3.org/2000/svg')
groups = doc.css('g')

但团体总是空的。我让它工作的唯一方法是从doc中删除名称空间。但是我不能那样做,因为我需要在更改一些内容后再次保存文档。
如何在不删除命名空间的情况下获取g标记?

最佳答案

听起来你好像有个诱发错误。为了代码格式化,我将把这个作为答案发布。

▶ Nokogiri::VERSION
#⇒ "1.5.4"

▶ xml = Nokogiri.parse '<?xml version="1.0" encoding="UTF-8"?>...'
▶ xml.xpath('//xmlns:g').size
#⇒ 5

除此之外,xml.css 'g'的工作方式也是一样的。

关于ruby - Nokogiri无法从svg获取g标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31698491/

10-10 23:38