我有一个输出的XElement
<Email>address@email.com</Email>
Run Code Online (Sandbox Code Playgroud)
.根据一些标准,我可能需要删除电子邮件地址并将其设置为null.我知道我可以设置element.Value =""; 但这不会做我想要的.我想修改它,所以输出将变为:
<Email xsi:nil=\"true\" />
Run Code Online (Sandbox Code Playgroud)
我不想创建一个全新的节点,因为这是文档中的引用节点.我想保持节点在文档中的位置.我试过了
emailItem.Add(new XAttribute("xsi:nil", "true"));
Run Code Online (Sandbox Code Playgroud)
但是我收到了以下例外情况
':'字符,十六进制值0x3A,不能包含在名称中.以下更改几乎正确地创建节点:
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
emailItem.Add(new XAttribute(xsi + "nil", true));
emailItem.Value =""; //How do I set to Null?
Run Code Online (Sandbox Code Playgroud)
我最终 <Email xsi:nil="true"></Email>代替 <Email xsi:nil="true"/>
是的,你需要以XName不同的方式指定; 你不能只XName在这样的命名空间中创建一个.
我怀疑你想要这个:
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
emailItem.Document.Root.Add(new XAttribute(XNamespace.Xmlns + "xsi",
xsi.ToString()));
emailItem.Add(new XAttribute(xsi + "nil", true);
Run Code Online (Sandbox Code Playgroud)
完整的例子:
using System;
using System.Xml.Linq;
class Test
{
static void Main()
{
XDocument doc = new XDocument(new XElement("root"));
XElement element = new XElement("email");
doc.Root.Add(element);
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
element.Document.Root.Add(
new XAttribute(XNamespace.Xmlns + "xsi", xsi.ToString()));
element.Add(new XAttribute(xsi + "nil", true));
Console.WriteLine(doc);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<email xsi:nil="true" />
</root>
Run Code Online (Sandbox Code Playgroud)