2011-03-01 82 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没有意义。