次のような 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 コードの何が問題になっていますか?