2011-01-20 4 views
1

xmlを操作するC++アプリケーションがあります。 私のアプリケーションの特定の時点でDOMNode *を取得し、それを子要素として要素にアタッチします。Xerces-CのDOMNode *からDOMElementへのパス*

さて問題は、私は、そのノードにパラメータを追加したいということです...よくそれはノードである、それは要素ではないので...唯一の要素はパラメータを持っている...

これは私のコードです:

xercesc::DOMNode* node = 0; 
std::string xml = from_an_obj_of_mine.GetXml(); /* A string with xml inside, the xml is sure an element having something inside */ 
xercesc::MemBufInputSource xml_buf((const XMLByte*)xml.c_str(), xml.size(), "dummy"); 
xercesc::XercesDOMParser* parser = new xercesc::XercesDOMParser(); 
parser->parse(xml_buf); /* parser will contain a DOMDocument well parsed from the string, I get here the node i want to attach */ 
node = my_pointer_to_a_preexisting_domdocument->GetXmlDocument()->importNode(parser->getDocument()->getDocumentElement(), true); /* I want to attach the node in parser to a node of my_pointer_to_an_el_of_my_preexisting_domdocument, it is a different tree, so I must import the node to attach it later */ 
my_pointer_to_an_el_of_my_preexisting_domdocument->appendChild(node); 

あなたは、私は、文字列からノードを作成したい見ることができるように、私は解析を通してそれを作成し、私がしたい場所をDOMツリーに属する新しい同じノードを作成するノードをインポートする必要があります新しいノードを接続します。 私の手順は次のとおりです。

  • は、XML文字列は、(どこかのDOMDocumentとして格納されている)既存のDOM

  • パーサはDOMを作成し使用してパーサ

  • の作成にアタッチするには、Getツリーから文字列

  • 私の既存のdom(私が新しいノードを付けたい場所)から、インポートを呼び出して、ノード を呼び出して、tに接続できるようにします彼は既存のdom。

  • は、私があまりにも要素を追加するには、appendChildを使用

    ...問題はそのインポートとインポートは私のノードを取得している...私がアタッチする要素をしたい

それを添付します...もちろん、メソッドはDOMNode *を望んでいますが、DOMElement *(DOMNodeを継承しています)にはOKです...

ノードからどのように要素を取得できますか? 削除wd_parser;

答えて

5

は、[OK]を、私はそれを発見した...

ちょうど要素にノードを再キャストし、それが行われ ... DOMNodeをは純粋仮想クラスであり、それは... DOMElementのの親であるので、それが正しく、物事を行う方法(論理的に言えば)です。

DOMElement* = dynamic_cast<DOMElement*>(node); 

:)

+3

こんにちは、実際には)(GETNODETYPEで予めノードの種類を確認する必要があります。それがELEMENT_NODEの場合は、DOMElementにキャストできます。 詳細については、http://xerces.apache.org/xerces-c/apiDocs-3/classDOMNode.htmlを参照してください。 – Clemens