2016-05-02 7 views
2
<?xml version="1.0"?> 
<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications 
     with XML.</description> 
    </book> 
    <book id="bk102"> 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world.</description> 
    </book> 
<catalog> 

IXMLDOMNode* pnode; 
IXMLDOMNode* pNodeAuthor = NULL; 
pnode->selectSingleNode (CComBSTR(L"author"), & pNodeAuthor); 

ORLibxml2のSelectSingleNodeと同様の機能ですか?

getElementsByTagName("book[@id='bk101']") 

OR

selectNodes("//book[@id='bk101']") 

Q:上記のXMLファイルでは、MicrosoftのXMLのDOMを使用して、私はselectSingleNode()またはgetElementbyTagNameを使用して、任意の特定のノードを取得することができています()またはのselectNodes ()関数を呼び出して、ノード名を渡します。

私はLibxml2を使って同じことをやりたいのですが、すべての標準関数を読みましたが、そのような関数はありません。

答えて

2

それはそれを行うために多くの方法があります

私はlibxml2のを使用していない多くの時間ですが...。一つの方法は、まずあなたがxmlParseFile()

xmlDocPtr xmlDoc = xmlParseFile(fileName); 

xmlDocPtr次へ]を取得、xmlファイルを開いて、解析する必要があるすべての、あなたはXMLを作成する必要があり、それは

簡単に言えば例のXPath

Hereを使用しています-path context with xmlXPathNewContext()

xmlXPathContextPtr xPathCnt = xmlXPathNewContext(xmlDoc); 

ここで、xpath rulでノードを見つけることができますes;

xmlXPathObjectPtr result = xmlXPathEvalExpression((xmlChar*)"//book[@id=\'bk101\']", xPathCnt); 

あなたのケースでは、結果がempyではなく、あなたが

xmlXPathNodeSetIsEmpty(result->nodesetval) 

でこれを確認することができ、あなたの要素がresult->nodessetvalにする必要があり、彼らは数でresult->nodessetval->nodeNr

詳細べきである場合リンクされた例申し訳ありません私の悪い英語

+0

ありがとう:

p.s:注意は、コードが

p.s.2テストされていません。ノードを横断する再帰関数を作成しました。 – Kru

関連する問題