- - PR -
MSXMLでのノード追加について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-06-04 18:10
こんにちは。よろしくお願いします。
DelphiでMSXMLを使用しております。 デフォルト名前空間が指定されているXMLで、名前空間をプレフィックス指定し(※)、取得したノードに対してノードを追加すると、タグに「xmlns=""」が入ってしまい困っております。 ※ プレフィックスを指定しないと「selectSingleNode」でノードがリターンされないため [XML] ------------------------------------------------------------------ <?xml version='1.0'?> <Books xmlns="urn:books"> <Book> <Title>Beginning XML</Title> <Publisher>Wrox</Publisher> </Book> </Books> [ソース] ------------------------------------------------------------------ procedure TForm1.Test; var doc : IXMLDOMDocument2; node, item : IXMLDOMNode; begin doc := CoDOMDocument40.Create(); doc.load('test.xml'); doc.setProperty('SelectionNamespaces', 'xmlns:bk="urn:books"'); node := doc.selectSingleNode('/bk:Books/bk:Book'); if node <> nil then begin item := doc.createElement('TEST'); item.appendChild(doc.createTextNode('TEXT')); Node.appendChild(item); end; doc.save('test.xml'); end; [結果] ------------------------------------------------------------------ <?xml version="1.0"?> <Books xmlns="urn:books"> <Book> <Title>Beginning XML</Title> <Publisher>Wrox</Publisher> <TEST xmlns="">TEXT</TEST> ←ここです </Book> </Books> ------------------------------------------------------------------ <TEST xmlns="">TEXT</TEST> ではなく、 <TEST>TEXT</TEST> とノードを追加する方法がありましたら、ご教授ください。 よろしくお願いします。 |
|
投稿日時: 2008-06-04 18:36
createElement()が作るのは名前空間が空のTEST要素なので、これは仕様どおり動いています。
MSXMLは使ったことないんですが、調べてみるとdoc.createNode()で名前空間付きの要素が作成できるようですね。 |
|
投稿日時: 2008-06-05 09:22
スフレさん、こんにちは。
doc.createNode() を使うことで解決できました。 ありがとうございました。 -------------------------------------------------------------------- procedure TForm1.test; var doc : IXMLDOMDocument2; node , item : IXMLDOMNode; begin doc := CoDOMDocument40.Create(); doc.load('test.txt'); doc.setProperty('SelectionNamespaces', 'xmlns:bk="urn:books"'); node := doc.selectSingleNode('/bk:Books/bk:Book'); if node <> nil then begin // item := doc.createElement('TEST'); ←変更 item := doc.createNode(NODE_ELEMENT, 'TEST', 'urn:books'); ←変更 item.appendChild(doc.createTextNode('TEXT')); Node.appendChild(item); end; doc.save('test.xml'); end; |
1