在 Atom 中使用 Ruby LibXML 找不到节点



我有以下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:property节点。 但是,我在 LibXML 中尝试的所有内容都没有返回任何内容。

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

这是我尝试过的:

@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,奇怪的是每个都工作得很好。 在搜索文档之前,我是否必须以某种方式"完成"或对文档做其他愚蠢的事情?

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

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

我想是时候看看代码了。

最新更新