【问题标题】:How to add noNamespaceSchemaLocation to root element of xml using xmlwirter如何使用 xmlwriter 将 noNamespaceSchemaLocation 添加到 xml 的根元素
【发布时间】:2016-09-22 14:13:50
【问题描述】:

我有一个 xml 的序列化对象,我想将 xsi:noNamespaceSchemaLocation 添加到根元素,我正在使用 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 对象后在最终 xml 中创建另一个根元素。

fileWriter.WriteStartElement("root");
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。我发现这可能是因为 XmlAttribute 的属性无效但不知道是什么。

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

任何帮助将不胜感激。

【问题讨论】:

    标签: xml xsd xml-serialization xmlserializer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 2016-05-26
      相关资源
      最近更新 更多