我有一个类似于以下内容的 XML 文档。
<library>
<artist name="a">
<album name="1"></album>
<album name="2"></album>
</artist>
<artist name="b">
<album name="8"></album>
<album name="9"></album>
</artist>
</library>`
我正在 Ubuntu 上的 Vala 中编写一个应用程序,并使用 libxml2 库来操作 XML 文档。我想获取所有album
节点,而不管它们在文档中的位置。我编写了以下代码来完成上述工作。
document = Xml.Parser.parse_file (PATH_TO_DB);
...
Xml.XPath.Context context;
unowned Xml.XPath.Object *object;
context = new Xml.XPath.Context(document);
object = context.eval("//album");
if(object->nodesetval->is_empty())
return null;
return object->nodesetval->item(0);
...
此 XPath 查询仅返回 下的专辑artist a
,即专辑 1 和 2。但是,context.eval("/library/artist[@name="b"]/album");
返回的是 下的所有专辑artist b
。
上面显示的代码的 python 等效项正在产生所需的结果。
doc = libxml2.parseFile("data.xml")
ctxt = doc.xpathNewContext()
res = ctxt.xpathEval("//album")
Vala 代码有什么问题?