Modify XElement to have different content
.net, xelement
Solution
Yes, you need to specify the `XName` differently; you can't just create an `XName` in a namespace like that.
I suspect you want this:
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);
Complete example:
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);
}
}
Output:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<email xsi:nil="true" />
</root>
Problem
I have an XElement which it's output is ``` <Email>address@email.com</Email> ``` . Base on some criteria I will possibly need to remove the email address and set it to null. I know I can yous set element.Value =""; but that will not do what I want. I want to modify it so the output will become: ``` <Email xsi:nil=\"true\" /> ``` I don't want to create a brand new node because this is a referenced node within a document. and i want to keep the node where it is within the document. I tried ``` emailItem.Add(new XAttribute("xsi:nil", "true")); ``` but I received the following exception The ':' character, hexadecimal value 0x3A, cannot be included in a name. The following changes create the node almost correctly: ``` XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; emailItem.Add(new XAttribute(xsi + "nil", true)); emailItem.Value =""; //How do I set to Null? ``` I end up with `<Email xsi:nil="true"></Email>` instead `<Email xsi:nil="true"/>`