- PR -

XMLの追加について

1
投稿者投稿内容
Marcye
常連さん
会議室デビュー日: 2004/06/17
投稿数: 22
お住まい・勤務地: 大阪
投稿日時: 2004-07-28 16:41
いつもお世話になっています。
すいません質問です。
以下のコードでXML文書に要素を追加しているのですが

XmlNode rootXmlNode = xmlDocument.DocumentElement;
XmlNamespaceManager xnm = new XmlNamespaceManager(xmlDocument.NameTable);
xnm.AddNamespace("nm","x-schema:tsSchema.xml");
XmlNode xmlList = rootXmlNode.SelectSingleNode(".//nm:thesaurus",xnm);
//XML文書に追加//

//追加する要素作成
XmlElement replacement = xmlDocument.CreateElement("replacement");
XmlElement pat = xmlDocument.CreateElement("pat");
XmlElement sub = xmlDocument.CreateElement("sub");
XmlText pattext = xmlDocument.CreateTextNode("新しい項目");
XmlText subtext = xmlDocument.CreateTextNode("新しい項目");
//項目の追加
xmlList.AppendChild(replacement);
replacement.AppendChild(pat);
replacement.AppendChild(sub);
pat.PrependChild(pattext);
sub.AppendChild(subtext);

以下のように要素<replacement> 属性「xmlns=""」が追加されてしまいます。
いろいろ調べてみたのですが分かりません。
ご存知の方いらっしゃいましたらご教授下さい。

<XML ID="Microsoft Search Thesaurus">
<!-- Commented out-->
<thesaurus xmlns="x-schema:tsSchema.xml">
<replacement xmlns="">
<sub>新しい項目</sub>
</replacement>
<replacement xmlns="">
<sub>新しい項目</sub>
</replacement>
<replacementxmlns="">
<sub>新しい項目</sub>
</replacement>
</thesaurus>
</XML>

[ メッセージ編集済み 編集者: Marcye 編集日時 2004-07-28 16:41 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-07-28 17:19
追加する要素にも名前空間を付けるとどうなりますか
Marcye
常連さん
会議室デビュー日: 2004/06/17
投稿数: 22
お住まい・勤務地: 大阪
投稿日時: 2004-07-28 17:41
MMXさんお返事ありがとうございます。
追加要素に名前空間つけてみたのですが・・・
以下のようになってしました。

XmlElement replacement = xmlDocument.CreateElement("nm","replacement",
"x-schema:tsSchema.xml");


<nm:replacement xmlns:nm="x-schema:tsSchema.xml">
<pat xmlns="">新しい項目</pat>
<sub xmlns="">新しい項目</sub>
</nm:replacement>

[ メッセージ編集済み 編集者: Marcye 編集日時 2004-07-28 19:06 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-07-28 21:22
.NET Framework1.1 では出ない
MSDN Japan Home > MSDN Library Japan > .NET Framework > リファレンス > クラス ライブラリ > System.Xml > XmlDocument クラス > メソッド
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemxmlxmldocumentclasscreateelementtopic.asp
ーーーーーーーーーーーーーーーーーーーーーーーー
using System;
using System.IO;
using System.Xml;

public class Sample {

public static void Main() {

// Create the XmlDocument.
XmlDocument doc = new XmlDocument();
string xmlData = "<book xmlns:bk='urn:samples'></book>";

doc.Load(new StringReader(xmlData));
//
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
xnm.AddNamespace("nm","x-schema:tsSchema.xml");

// Create a new element and add it to the document.
XmlElement elem = doc.CreateElement("bk", "genre", "urn:samples");
elem.InnerText = "fantasy";
doc.DocumentElement.AppendChild(elem);

//追加する要素作成
XmlElement replacement = doc.CreateElement("replacement");
XmlElement pat = doc.CreateElement("pat");
XmlElement sub = doc.CreateElement("sub");
XmlText pattext = doc.CreateTextNode("新しい項目");
XmlText subtext = doc.CreateTextNode("新しい項目");
//項目の追加
doc.DocumentElement.AppendChild(replacement);
replacement.AppendChild(pat);
replacement.AppendChild(sub);
pat.PrependChild(pattext);
sub.AppendChild(subtext);

Console.WriteLine("Display the modified XML...");
doc.Save(Console.Out);

}
}
ー-----------------
Display the modified XML...
<?xml version="1.0" encoding="shift_jis"?>
<book xmlns:bk="urn:samples">
<bk:genre>fantasy</bk:genre>
<replacement>
<pat>新しい項目</pat>
<sub>新しい項目</sub>
</replacement>
</book>
ーーーーーーーーーーーーーーーーー
xmlns=""
が付いても XML 的には等価じですが、だめなら 正規化とか簡約化を考える?
Marcye
常連さん
会議室デビュー日: 2004/06/17
投稿数: 22
お住まい・勤務地: 大阪
投稿日時: 2004-07-29 13:14
MMXさんお返事ありがとうございます。

XMLの追加の件ですが、解決いたしました。
以下のように「"x-schema:tsSchema.xml"」を追加したところ
「xmlns=""」が消えました。

お世話になりました。
毎回本当にありがとうございます。

XmlNode rootXmlNode = xmlDocument.DocumentElement;
XmlNamespaceManager xnm = new XmlNamespaceManager(xmlDocument.NameTable);
xnm.AddNamespace("nm","x-schema:tsSchema.xml");
XmlNode xmlList = rootXmlNode.SelectSingleNode(".//nm:thesaurus",xnm);
//XML文書に追加//

//追加する要素作成
XmlElement replacement = xmlDocument.CreateElement("replacement",
"x-schema:tsSchema.xml");
XmlElement pat = xmlDocument.CreateElement("pat","x-schema:tsSchema.xml");
XmlElement sub = xmlDocument.CreateElement("sub","x-schema:tsSchema.xml");
XmlText pattext = xmlDocument.CreateTextNode("新しい項目");
XmlText subtext = xmlDocument.CreateTextNode("新しい項目");
//項目の追加
xmlList.AppendChild(replacement);
replacement.AppendChild(pat);
replacement.AppendChild(sub);
pat.PrependChild(pattext);
sub.AppendChild(subtext);
1

スキルアップ/キャリアアップ(JOB@IT)