使用xml序列化程序删除xmlns属性

时间:2011-03-01 15:35:35

标签: c# xml serialization

我正在尝试为元素中的一个属性添加前缀,因此我可以将其提供给要解析的程序,但是,当我尝试添加命名空间时,它会生成程序不喜欢的附加属性。我想知道是否有可能在为我的其他属性保留前缀的同时摆脱附加属性。

谢谢。

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" />

1 个答案:

答案 0 :(得分:3)

没有。正如marc_s所说,你不能自己使用前缀。前缀的重点是标识您已定义的XML命名空间。

通常(但不是强制性的)文档将在根元素中定义其前缀与其名称空间之间的关系,然后使用前缀在整个文档中引用该名称空间。

您的文件:

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

...不是格式良好的XML,正如您所说,“这是一个Test元素,它在前缀{{定义的名称空间中有一个名为myAttribute的属性1}}“,但你没有在任何地方定义该命名空间。

这将是良好的形式:

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> 的实际xmlns定义,则prefix没有意义。