我正在读取csv文件并使用c#中的XmlSerializer将数据传输到xml文件。但是现在我面临根元素中的命名空间问题。我需要的xml应该采用以下格式。
<?xml version="1.0" encoding="ASCII"?>
<abc:Country xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:abc="some url">
<Person></Person>
</abc:Country>
但我以这种格式获得输出:
<?xml version="1.0" encoding="ASCII"?>
<Country xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Person></Person>
</Country>
我希望abc的名称空间包含在根目录中,然后也是#34; abc&#34;应该只作为我的根元素的前缀,即&#34;国家&#34;。我尝试使用在线提到的各种选项,但它们实际上都没有为我工作。当我使用XmlSerializerNamespaces并重载我的Serialiser类时,所有opther命名空间都消失了。所以你能告诉我如何实现这一点。
答案 0 :(得分:0)
使用XmlSerializer很重要吗?相反,使用XDocument很容易做到这一点。像这样:
var document = new XDocument();
XNamespace abcns = "http://some/url/abc";
XNamespace xmins = "http://www.omg.org/XMI";
XNamespace xsins = "http://www.w3.org/2001/XMLSchema-instance";
var element = new XElement(abcns + "Country",
new XAttribute(XNamespace.Xmlns + "abc", abcns),
new XAttribute(XNamespace.Xmlns + "xmi", xmins),
new XAttribute(XNamespace.Xmlns + "xsi", xsins),
new XAttribute(xmins + "version", "2.0"),
new XElement("Person"));
document.Add(element);
答案 1 :(得分:0)
我们可以使用以下命令在xml的根元素中包含多个名称空间:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("xmi", "http://www.omg.org/XMI");
ns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
ns.Add("abc", "some url");
XmlSerializer serializer = new XmlSerializer(typeof(Country));
TextWriter textWriter = new StreamWriter(@"C:\test.xml", true, Encoding.ASCII);
serializer.Serialize(textWriter, country, ns);
&#34;国家&#34;将是你要为类创建的对象&#34; Country&#34;(xml的根元素)。