如何向XML元素添加xsi:type属性
本文关键字:xsi type 属性 添加 元素 XML | 更新日期: 2023-09-27 18:09:58
如何在xml元素中添加xsi:type
我正在用c#写一个例程,它使用XmlSerializer序列化Xml文件。一切似乎都很好,只是有一件事我起初以为是小事,结果却不是。
这是我的代码,
public class OuterElement
{
public string firstElement { get; set; }
public string secondElement { get; set; }
public InnerElement innerElement = new InnerElement();
}
public class InnerElement
{
[XmlAttribute(AttributeName="xsi:type")]
public string type { get; set; }
}
private void Form1_Load(object sender, EventArgs e)
{
XmlSerializer serializer = new XmlSerializer(typeof(OuterElement));
OuterElement outerElement = new OuterElement();
outerElement.firstElement = "name";
outerElement.secondElement = "CD";
outerElement.innerElement.type = "testsample";
using (TextWriter writer = new StreamWriter(@"G:'abc.xml"))
{
serializer.Serialize(writer, outerElement);
}
}
我想要这样的xml,
<OuterElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" lns:xsd="http://www.w3.org/2001/XMLSchema">
<innerElement xsi:type="testsample">
</innerElement>
<firstElement>name</firstElement>
<secondElement>CD</secondElement>
</OuterElement>
您需要为属性声明正确的名称空间,如下所示:
public class InnerElement
{
[XmlAttribute(Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string type = "bla";
}
这将产生您想要的输出:
<OuterElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<innerElement xsi:type="testsample" />
<firstElement>name</firstElement>
<secondElement>CD</secondElement>
</OuterElement>
您需要使用XmlTypeAttribute
[XmlType("testsample")]
public class InnerElement
{
}
这将产生如下结果:
<innerElement xsi:type="testsample" />