2

xml を操作する C++ アプリケーションがあります。アプリケーションのある時点で DOMNode* を取得し、それを子として要素にアタッチします。

問題は、そのノードにパラメーターを追加したいということです...まあ、それはノードなので要素ではありません...要素だけがパラメーターを持っています...

これは私のコードです:

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 ツリーに属する新しい同一のノードを作成する必要があります。私の手順は次のとおりです。

  • 既存の dom にアタッチする xml 文字列を取得します (どこかに domdocument として保存されます)。

  • パーサーを作成する

  • パーサーを使用して、文字列から dom ツリーを作成します

  • 既存の dom (新しいノードをアタッチする場所) から、インポートを呼び出してノードを複製し、既存の dom にアタッチできるようにします。

  • 取り付けます

問題は、インポートとインポートがノードを取得することです...要素をアタッチしたい...

私はappendChildを使用して要素を追加します...もちろん、メソッドはDOMNode *を必要としますが、それにDOMElement *(DOMNodeから継承)を与えることは問題ありません...

ノードから要素を取得するにはどうすればよいですか??? wd_parser を削除します。

4

1 に答える 1

6

わかりました私はそれを発見しました...

ノードを要素に再キャストするだけで完了です...DOMNodeは純粋な仮想クラスであり、DOMElementの親です...したがって、それは正しく、物事を行う方法でもあります(論理的に言えば)。

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

:)

于 2011-01-20T12:09:25.127 に答える