如何使用xmlwirter将noNamespaceSchemaLocation添加到xml的根元素

时间:2016-09-22 14:13:51

标签: xml xsd xml-serialization xmlserializer

我有一个xml的序列化对象,我想将 xsi:noNamespaceSchemaLocation 添加到root元素,我正在使用xmlwriter。

我希望我的xml像下面的例子一样。

<?xml version="1.0" encoding="utf-8"?>
 <root xsi:noNamespaceSchemaLocation="abc.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <child>false</child>
 </root>

WriteStartElement对我不起作用,因为它会在写完fileWriter对象后在final xml中创建另一个根元素。

fileWriter.WriteStartElement( “根”);
     fileWriter.WriteAttributeString(“xsi”,“noNamespaceSchemaLocation”,null,“abc.xsd”);

我扩展了xsd.exe为我的xsd生成的部分类,并在我的类中添加了一个成员

[XmlAttribute(AttributeName="noNamespaceSchemaLocation",Namespace="http://www.w3.org/2001/XMLSchema-instance")]
public string noNamespaceSchemaLocation = "abc.xsd";

现在输出是 -

<?xml version="1.0" encoding="utf-8"?>
<root p1:noNamespaceSchemaLocation="abc.xsd" xmlns:p1="http://www.w3.org/2001/XMLSchema-instance">
  <child>false</child>
</root>

我想用xsi代替p1.I发现它可能是因为XmlAttribute的无效属性但无法弄清楚是什么。

使用XMLDocuments不是一个选项,因为我想使用xml序列化。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于空名称空间,添加了

p1前缀。当我从xml中删除默认命名空间时,它起作用,现在当我编写部分类时,xsi前缀会被添加。