我需要创建一个类似于此的xml结构:
<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://fuu.gub">
<ns0:ChildElement xmlns:ns0="http://fuu.gub">
<ns0:Data>Some-data</ns0:Data>
</ns0:ChildElement>
</ns0:RootElement>
必须在RootElement和ChildElement中定义名称空间ns0。 我使用Xml.Serialization来序列化我的对象,但我无法完成这项工作。 序列化程序忽略了子元素上的命名空间,因为它已在父元素中定义。这意味着我最终得到以下结果:
<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://fuu.gub">
<ns0:ChildElement>
<ns0:Data>Some-data</ns0:Data>
</ns0:ChildElement>
</ns0:RootElement>
这是我的代码
[XmlRoot("RootElement", Namespace = "http://fuu.gub")]
public class RootElement
{
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces XmlNamespaces { get; set; }
[XmlElement("ChildElement")]
public ChildElement Child { get; set; }
public RootElement() {
XmlNamespaces = new XmlSerializerNamespaces();
XmlNamespaces.Add("ns0", "http://fuu.gub");
Child = new ChildElement();
}
public void ToXml(string path)
{
XmlSerializer x = new System.Xml.Serialization.XmlSerializer(this.GetType());
TextWriter txtW = new StreamWriter(path);
x.Serialize(txtW, this);
}
}
[XmlRoot(Namespace = "http://fuu.gub")]
public class ChildElement
{
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces XmlNamespaces { get; set; }
[XmlElement]
public string Data{ get; set; }
public ChildElement()
{
XmlNamespaces = new XmlSerializerNamespaces();
XmlNamespaces.Add("ns0", "http://fuu.gub");
Data = "Some-data";
}
}
答案 0 :(得分:1)
这里http://www.w3schools.com/xml/xml_namespaces.asp我发现了这个:
为元素定义名称空间时,所有子元素都使用 相同的前缀与同一名称空间相关联。
命名空间可以在使用它们的元素中声明 XML根元素
注意:解析器不使用命名空间URI来查找 信息。
定义命名空间时,不能使用相同的前缀再次定义另一个/相同的命名空间。
我相信您可以使用具有不同前缀的相同名称空间。