【发布时间】:2022-01-06 04:06:55
【问题描述】:
在 C# (.NET 5) 中将属性 xsi:nil="true" 添加到 XML 元素时,它会丢失前缀。为什么会发生这种情况,更重要的是,我怎样才能确保添加了前缀?为了让 XML 传递 XSD,我需要它。
示例。考虑以下代码:
var document = new XmlDocument();
document.CreateXmlDeclaration("1.0", "utf-8", null);
var foo = document.CreateElement("foo");
document.AppendChild(foo);
foo.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
var bar = document.CreateElement("bar");
bar.SetAttribute("xsi:nil", "true");
foo.AppendChild(bar);
using var stream = new MemoryStream();
using var xmlWriter = XmlWriter.Create(stream, new XmlWriterSettings() { OmitXmlDeclaration = false, Indent = true });
document.Save(xmlWriter);
string result = Encoding.UTF8.GetString(stream.ToArray());
System.Diagnostics.Debug.WriteLine(result);
这会导致:
<?xml version="1.0" encoding="utf-8"?>
<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bar nil="true" />
</foo>
【问题讨论】:
-
意识到没有前缀被特别祝福或赋予含义而不通过命名空间声明被引入文档。
xsi:本身并没有任何意义。 -
@Damien_The_Unbeliever,感谢您提到这一点。我不知道这是否重要,但我更改了示例以包含
xsi:的命名空间。 -
按照我给你的链接:dotnetfiddle.net/ZOZ9Ts
-
你是对的。谢谢@canton7!我的问题有点重复。