2015-07-13 66 views
0

我有一個XmlWriter,它已經有一個xmlns屬性集的根元素。用XmlWriter命名空間編寫XElement?

我現在有一個XElement(有很多子元素),沒有指定名稱空間。

如果我只是做:

xElement.WriteTo(writer); 

我結束與一個無效的xml:

<MyRootElement xmlns="SomeNameSpace"> 
    <!-- Some elements of this namespace --> 

    <MyXElementType xmlns=""> 
     <!-- A lot of other Element in the same namespace --> 
    </MyXelementType> 
    <!-- Some elements of this namespace --> 
</MyRootElement> 

,因爲它禁止指定一個空的命名空間。這是有問題的,因爲我需要在XSD之後進行驗證。

我可以做這樣結束:

<MyXElementType><!-- HERE, no xmlns !!! --> 
     <!-- A lot of other Element in the same namespace --> 
    </MyXelementType> 
    <!-- Some elements of this namespace --> 
</MyRootElement> 

回答

0

是什麼讓你認爲這是無效的? The spec說:

默認命名空間聲明中的屬性值可能爲空。在聲明的範圍內,這與沒有默認名稱空間的效果相同。

如果你想刪除它,那麼你需要寫它之前,你XElement及其後代的命名空間設置爲相同的命名空間和您現有的根元素。你可以做到這一點,在創建時:

foreach (var element in element.DescendantsAndSelf()) 
{ 
    element.Name = ns + element.Name.LocalName; 
} 
+0

好吧,其實我在另一篇文章閱讀,它可能是空的,但是這僅僅是默認行爲:

XNamespace ns = "SomeNamespace"; var element = new XElement(ns + "MyXElementType"); 

或者事後,而不是我們之後可以設置的東西。也許我誤解了 – J4N