gpt4 book ai didi

c# - 将对 xml 模式的引用添加到 XML 序列化输出

转载 作者:太空狗 更新时间:2023-10-29 17:39:38 24 4
gpt4 key购买 nike

使用代码序列化对象时:

var xmlSerializer = new XmlSerializer(typeof(MyType));
using (var xmlWriter = new StreamWriter(outputFileName))
{
xmlSerializer.Serialize(xmlWriter, myTypeInstance);
}

在我得到的输出 xml 文件中:

<MyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">

我如何向它添加对 xml 模式的引用,所以它看起来像这样:

<MyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:noNamespaceSchemaLocation="mySchema.xsd">

最佳答案

[编辑]

您可以显式实现 IXmlSerializable 并自己编写/读取 xml。

public class MyType : IXmlSerializable
{
void IXmlSerializable.WriteXml(XmlWriter writer)
{
writer.WriteAttributeString("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
writer.WriteAttributeString("xsi", "noNamespaceSchemaLocation", XmlSchema.InstanceNamespace, "mySchema.xsd");

// other elements & attributes
}

XmlSchema IXmlSerializable.GetSchema()
{
throw new NotImplementedException();
}

void IXmlSerializable.ReadXml(XmlReader reader)
{
throw new NotImplementedException();
}
}

xmlSerializer.Serialize(xmlWriter, myTypeInstance);

很可能不是一个理想的解决方案,但将以下字段和属性添加到您的类中就可以解决问题。

public class MyType
{
[XmlAttribute(AttributeName="noNamespaceSchemaLocation", Namespace="http://www.w3.org/2001/XMLSchema-instance")]
public string Schema = @"mySchema.xsd";
}

另一种选择是创建您自己的自定义 XmlTextWriter 类。

xmlSerializer.Serialize(new CustomXmlTextWriter(xmlWriter), myTypeInstance);

或者不使用序列化

var xmlDoc = new XmlDocument();
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));

var xmlNode = xmlDoc.CreateElement("MyType");
xmlDoc.AppendChild(xmlNode);

xmlNode.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlNode.SetAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");

var schema = xmlDoc.CreateAttribute("xsi", "noNamespaceSchemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
schema.Value = "mySchema.xsd";
xmlNode.SetAttributeNode(schema);

xmlDoc.Save(...);

希望这有助于...

关于c# - 将对 xml 模式的引用添加到 XML 序列化输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4609462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com