2012-04-18 134 views
0

我有這個如何去除子元素中的空名稱空間「xmlns =」「」?

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() 
    ) 
); 

它給

<?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這個結果,怎麼能做到呢? (注意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 =「」的,但他們有不同的含義:

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), 

您期望的樣本輸出表明這兩個選擇的前者。

+0

感謝這對我有意義,但我仍然不知道該怎麼做。 – radbyx 2012-04-18 08:31:21

+0

我只是想在'Foo'之後像'Always'一樣,但在'ReportHeader'和'Group'之後沒有任何東西:) – radbyx 2012-04-18 08:37:06

+0

如果我用'Foo'替換'ns.GetName(「Foo」)'',我沒有得到'Foo'後的'xmlns =「http://something0.com」',如果這是有道理的話。 (它消除了很多) – radbyx 2012-04-18 08:40:55

相關問題