我需要生成将由外部应用程序使用的XML文件。我观察到它依赖于XML中定义的命名空间的排序。由于xml被外部应用程序使用,因此我没有确切的错误详细信息。
以下是示例代码
[System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://mycompany.com/2010/package")]
[System.Xml.Serialization.XmlRootAttribute("Catalog", Namespace="http://mycompany.com/2010/package", IsNullable=false)]
public partial class PackageT : System.ComponentModel.INotifyPropertyChanged {
}
为了包含自定义schemalocation而编写的扩展类
public partial class PackageT
{
[XmlAttributeAttribute("schemaLocation", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string xsiSchemaLocation = "http://mycompany.com/2010/catalog.xsd";
}
将对象序列化为XML的代码
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add("xml", "http://www.w3.org/XML/1998/namespace");
namespaces.Add("test", "http://mycompany.com/2010/package");
XmlSerializer serializer = new XmlSerializer(typeof(PackageT));
TextWriter writer = new StreamWriter("package.xml");
serializer.Serialize(writer, catalog, namespaces);
writer.Flush();
writer.Close();
生成的XML(不工作)
<?xml version="1.0" encoding="utf-8"?>
<test:Catalog
xmlns:xml="http://www.w3.org/XML/1998/namespace"
d1p1:schemaLocation="http://mycompany.com/2010/catalog.xsd"
xmlns:d1p1="http://www.w3.org/2001/XMLSchema-instance" xmlns:test="http://mycompany.com/2010/package">
....
</test:Catalog>
正在运行的预期XML
<?xml version="1.0" encoding="utf-8"?>
<test:Catalog d1p1:schemaLocation="http://mycompany.com/2010/catalog.xsd"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:d1p1="http://www.w3.org/2001/XMLSchema-instance" xmlns:test="http://mycompany.com/2010/package">
....
</test:Catalog>
请帮助我!!
答案 0 :(得分:0)
如果为根指定元素名称和命名空间,则可以生成您正在寻找的XML。修改PackageT如下:
[XmlRoot(ElementName = "Catalog", Namespace = "http://mycompany.com/2010/package") ]
public partial class PackageT
{
[XmlAttribute("schemaLocation", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string xsiSchemaLocation = "http://mycompany.com/2010/catalog.xsd";
}
,输出变为:
<?xml version="1.0" encoding="utf-8"?>
<test:Catalog xmlns:xml="http://www.w3.org/XML/1998/namespace"
d1p1:schemaLocation="http://mycompany.com/2010/catalog.xsd"
xmlns:d1p1="http://www.w3.org/2001/XMLSchema-instance"
xmlns:test="http://mycompany.com/2010/package" />