2009-04-29 2 views
4

xmlファイルで空の名前空間タグを取り除こうとしています。私が見たすべてのソリューションは、XMLをゼロから作成することに基づいています。私は以前のxmlから構築されたさまざまなxelementsを持っています。私がやっているのはlinq to xml - 空のxmlnsを取り除く

XElement InputNodes = XElement.Parse(InputXML); 
m_Command = InputNodes.Element("Command"); 

です。どこにでもxmlns = ""を追加しています。これは本当に怒っている。助けてくれてありがとう。

答えて

0

は、おそらくそれは、このです:Empty namespace using Linq Xml

これは、あなたの文書は、追加要素とは異なるデフォルトの名前空間にあることを示します。

+0

これは問題ですが、別のxmlドキュメントの半分をすでに取得しているため、xelementsを作成できません。 – Steve

+0

ドキュメントの名前空間と挿入する要素が一致していることを確認するだけです。そうでない場合、デフォルトから逸脱したすべての要素は独自のxmlns属性を取得するため、XMLファイルでその違いが保持されます。実用的な解決のために+1 – Tomalak

8

MSDNのブログにはpostがありますが、これを(合理的に)簡単に回避する方法が示されています。 XMLをoutputingする前に、あなたはこのコードを実行することをお勧めします:

foreach (XElement e in root.DescendantsAndSelf()) 
{ 
    if (e.Name.Namespace == string.Empty) 
    { 
     e.Name = ns + e.Name.LocalName; 
    } 
} 

代替ポスターが言及したように、あなたはそれを追加すると、名前空間を持つすべての要素名を前に置くが、これはでよりよい解決策のように思えるされますそれはより自動化され、タイピングのビットを節約します。

+0

+1。 ;) – Tomalak

0

私はこの記事に二答えを考える:

XElement Add function adds xmlns="" to the XElement

は非常に有用でした。基本的にはあなただけの場合

XNamespace rootNamespace = doc.Root.Name.NamespaceName; 
XElement referenceElement = new XElement(rootNamespace + "Reference"); 

これで解決するはずです。だから私はあなたが要素を作成するときに特別な名前空間について心配しないように伝えなければならないと思います。奇妙な