2012-04-18 15 views
0

は、私はそれがサブ要素に空の名前空間 "xmlns =" ""を取り除くにはどうすればよいですか?

<?xml version="1.0" encoding="utf-8"?> 
<Foo xmlns:xsi="http://something1.com" 
xsi:schemaLocation="http://something3.com" 
xmlns="http://something0.com"> 
    <ReportHeader xmlns=""> 
     ... 
    </ReportHeader> 
    <Group xmlns=""> 
     ... 
    </Group> 
</Foo> 

を与えるしかし、私はこの結果をwan'tこの

XNamespace ns = "http://something0.com"; 
XNamespace xsi = "http://something1.com"; 
XNamespace schemaLocation = "http://something3.com"; 

XDocument doc2 = new XDocument(
    new XElement(ns.GetName("Foo"), 
     new XAttribute(XNamespace.Xmlns + "xsi", xsi), 
     new XAttribute(xsi.GetName("schemaLocation"), schemaLocation), 
     new XElement("ReportHeader", GetSection()), 
     GetGroup() 
    ) 
); 

を持って、どのようにそれを行うことができますか? (.. xmlns=""が欠落している注意してください)

<?xml version="1.0" encoding="utf-8"?> 
<Foo xmlns:xsi="http://something1.com" 
xsi:schemaLocation="http://something3.com" 
xmlns="http://something0.com"> 
    <ReportHeader> 
     ... 
    </ReportHeader> 
    <Group> 
     ... 
    </Group> 
</Foo> 

答えて

3

ここにあなたの問題は、あなたが文書に「http://something0.com」のデフォルトの名前空間を設定するが、その後、この中にはない要素を追加しているということです名前空間 - 空の名前空間にあります。

文書にはデフォルトのネームスペースxmlns = "http://something0.com"があると記載されていますが、空のネームスペースにある要素を追加します(追加したときにネームスペースを指定しなかったためです) - それらは明示的にxmlns = ''とマークされ、ドキュメントのデフォルト名前空間にないことを示します。

この

はのxmlns =「」を取り払うには2つの解決策があることを意味しますが、それらは異なる意味を有する:

1)あなたが意味する場合は、間違いのデフォルトの名前空間を指定する(ルート要素でxmlns="http://something0.com"をしたいが文書は) - その後のxmlns =「」:

// create a ReportHeader element in the namespace http://something0.com 
new XElement(ns + "ReportHeader", GetSection()) 

2)これらの要素は、名前空間 であることを意味していない場合は、あなたに必要なの要素を作成するときにこの名前空間を指定する必要があり "「消える」にしますhttp://something0.com "を入力した場合は、デフォルトとして追加しないでください。 ドキュメントの先頭(ルート要素の のxmlns = "http://something0.com"ビット)。

XDocument doc2 = new XDocument(
    new XElement("foo", // note - just the element name, rather s.GetName("Foo") 
      new XAttribute(XNamespace.Xmlns + "xsi", xsi), 

期待されるサンプル出力は、前者の2つの選択肢を示唆しています。

+0

ありがとうございました。私には意味がありますが、どうしたらよいかまだ分かりません。 – radbyx

+0

私はちょうど私がFoo' 'と' ns.GetName(「foo」を) '置き換えると、私は得ることはありませんいつものようにFoo''後に同じことをしたいんが、 'ReportHeader'と' Group'後に何も:) – radbyx

+0

'Foo'の後ろにある' xmlns = "http://something0.com"です。 (それは多くに取り除かれます) – radbyx

関連する問題