获取标记名称的xpath语法是什么?

时间:2011-01-18 18:25:11

标签: ruby xml xpath nokogiri

我正在使用Nokogiri来解析一个大型XML文件。说我有以下结构:

<menagerie>
  <penguin>Pablo</penguin>
  <penguin>Mortimer</penguin>
  <bull>Ferdinand</bull>
  <aardvark>James Cornelius Madison Humphrey Zophar Handlebrush III</aardvark>
</menagerie>

我可以算上这样的非企鹅:

xml.xpath('//menagerie//*[not(penguin)]').length // 2

但是如何获得这样的标签列表呢? (确切的格式并不重要;我只是想直观地扫描非企鹅。)

bull
aardvark

更新

这给了我想要的清单 - 感谢 Oded TMN delnan

xml.xpath('//menageries/*[not(penguin)]').each do |node|
  puts node.name()
end

2 个答案:

答案 0 :(得分:11)

您可以使用name()local-name() XPath函数。

请参阅zvon上的示例。

答案 1 :(得分:4)

我知道它有点过时,但您应该:xml.xpath('//meagerie/*[not(penguin)]/name()')作为表达式。注意斜线,而不是点。这是在XPath中调用当前节点上的方法的方法。