2011-03-01 79 views
0

我想向元素中的某個屬性添加一個前綴,這樣我就可以將它賦給一個程序來解析,但是,當我嘗試添加一個名稱空間時,它會生成一個附加屬性該程序不喜歡。我想知道是否有可能擺脫額外的屬性,同時保留我的其他屬性的前綴。使用xml序列化程序去除xmlns屬性

謝謝。

public class Test 
{ 
    public Test() 
    { 
     Namespaces=new XmlSerializerNamespaces(); 
     Namespaces.Add("prefix", "prefix"); 
    } 

    [XmlNamespaceDeclarations] public XmlSerializerNamespaces Namespaces; 

    [XmlAttribute(AttributeName = @"myAttribute", Namespace = @"prefix",Form = XmlSchemaForm.Qualified)] 
    public string MyAttribute { get; set; } 
} 

我所得到的是這樣的:

<Test xmlns:prefix="prefix" prefix:myAttribute="Go" /> 

我想獲得的是:

<Test prefix:myAttribute="Go" /> 
+4

你不能只是**使用**前綴:'前綴沒有**首先定義**! – 2011-03-01 15:39:55

回答

3

號作爲marc_s說,你不能對自己使用的前綴。前綴的全部內容是標識您已經定義的XML名稱空間。

通常(但不是強制性的)文檔將定義它的前綴和它在根元素中的名稱空間之間的關係,然後使用前綴在整個文檔中引用該名稱空間。

您的文檔:

<?xml version="1.0" encoding="UTF-8"?> 
<Test prefix:myAttribute="Go" /> 

...是不是格式良好的XML,因爲你說,「這是一個Test元素,它的屬性稱爲由定義的命名空間myAttribute前綴prefix「,但您尚未在任何位置定義該名稱空間。

這將很好地形成:

<?xml version="1.0" encoding="UTF-8"?> 
<Test xmlns:prefix="prefix" prefix:myAttribute="Go" /> 

...因爲這會,這可能會幫助你,因爲它至少在格式生成一個元素,你想:

<?xml version="1.0" encoding="UTF-8"?> 
<SomeRootElement xmlns:prefix="prefix"> 
    <Test prefix:myAttribute="Go" /> 
</SomeRootElement> 

但是沒有prefix的實際xmlns定義,prefix:myAttribute沒有意義。