使用Ruby LibXML无法在Atom中找到节点

时间:2012-06-08 23:20:38

标签: ruby xml libxml2 libxml-ruby

我有以下XML文档:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:apps=\"http://schemas.google.com/apps/2006\" xmlns:gd=\"http://schemas.google.com/g/2005\">
  <apps:property name=\"memberId\" value=\"Tom\"/>
</atom:entry>

我要做的就是获取apps:属性节点。但是我在LibXML中尝试的所有内容都不会返回任何内容。

阅读LibXML :: XML :: XPath的LibXML文档here。我假设我不需要指定两个名称空间,因为它们是在根节点上定义的。

这是我尝试过的:

@document.find('/apps:property')
@document.find('//apps:property')
@document.find('/atom:entry/apps:property')
@document.find('//atom:entry/apps:property')
@document.find('/property')
@document.find('/atom:entry')
@document.find('//property')
@document.find('/entry')

以上都不会返回指定文档的结果。我已尝试使用原子和应用程序命名空间定义的不同组合,但它似乎没有效果。

如果有人能告诉我一些非常简单的事情,我一定会感到非常欣赏。


事实证明,问题源于文档是动态创建的,而不是从文件中读取。

当我将文档写入文件并阅读时,我可以搜索它。当我创建文档时,创建根元素并以编程方式添加子项每次尝试搜索时都会得到nil,奇怪的是每个都工作得很好。在搜索之前,我是否必须以某种方式“完成”或对文档做一些其他愚蠢的事情?

1 个答案:

答案 0 :(得分:0)

如果我明确解析文档,那么我可以搜索它。

看起来这可能是解决方案,除非在构建文档时可以生成解析树。

时间看看我想的代码。