2016-11-25 11 views
0

libxmlを使用してC++でテキスト値を取り出す方法は?ここでxpathを使ってlibxml2を使ってC++のxmlファイルからノードと特定の要素文字列を取り出す方法は?

はXMLです:

<?xml version="1.0" encoding="UTF-8"?> 
<Help xmlns="http://www.example.org/HelpFileStructure" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/HelpFileStructure HelpFileStructure.xsd "> 
    <Text>dfgdfg</Text> 
</Help> 

コード:

void Help::HelpName() 
{ 
    string Help_text; 
    parser.parse_file(XmlFileName); 
    Node* root = parser.get_document()->get_root_node(); 
    NodeSet result = root->find("/Help/Text"); 
    Element *first_element = (Element *)result.at(0); 
    Help_text = first_element->get_child_text()->get_content(); 
} 

答えて

0

使用この:

NodeSet result = root->find("//*[local-name()='Help']/*[local-name()='Text']"); 

各ノードに関係なく、Textという名前の要素であるノードセットを取得しますその要素が入っている名前空間のうち、それはHelpという要素の子であり、関係なく、どのような名前空間のそれは中です。

あなただけhttp://www.example.org/HelpFileStructure名前空間でHelpText要素をしたい、といくつかの他の名前空間にある文書が持つかもしれない任意のTextHelp要素を無視したい場合は、namespace-uri()を使用することができます

NodeSet result = root->find("//*[local-name()='Help' and namespace-uri()='http://www.example.org/HelpFileStructure']/*[local-name()='Text' and namespace-uri()='http://www.example.org/HelpFileStructure']"); 
+0

xmlns = "http://www.example.org/HelpFileStructure"をxmlファイルから削除したとき。それは働いている。私はエラー "文字列リテラル演算子 '演算子"を見つけることができません "const char [39]で"ヘルプ "、長いロングunsigned int'引数"手順の後に – user3214224

+0

この行のアプリケーションはクラッシュせずに作業をコメントしましたが、文字列値を取得しない要素* first_element =(要素*)result.at(0); – user3214224

+0

更新された回答をご覧ください。 '.find()'の後に、質問に書かれているコードが、ノードセットから最初のノードのテキスト内容を取得することを期待していることがわかりました。 – sideshowbarker

関連する問題