I have a string array with an english version and a string array with a russian translation XML document looks like this
<messages>
<message id="1">
<variant language="en_US">Customer</variant>
<variant language="ru_RU"/>
</message>
<message id="2">
<variant language="en_US">Model</variant>
<variant language="ru_RU"/>
</message>
</messages>
I tried to first delete the node with the ru_RU attribute and write a new node with the translation, but I got the error "Object reference not set to an instance of an object"
mlDocument xml = new XmlDocument();
xml.Load(@"C:\Users\User\source\repos\TestZad2\TestZad2\ViewerMessages.xml");
XmlElement element = xml.DocumentElement;
if(element.Attributes["variant language"].Value == "ru_RU")
{
xml.RemoveChild(element);
}
xml.Save(@"C:\Users\User\source\repos\TestZad2\TestZad2\ViewerMessages.xml");
Here's how I would do this:
var document = XDocument.Parse(@"<messages>
<message id=""1"">
<variant language=""en_US"">Customer</variant>
<variant language=""ru_RU""/>
</message>
<message id=""2"">
<variant language=""en_US"">Model</variant>
<variant language=""ru_RU""/>
</message>
</messages>");
var variant =
(
from m in document.Root.Elements("message")
where (int)m.Attribute("id") == 1
from v in m.Elements("variant")
where (string)v.Attribute("language") == "ru_RU"
select v
).FirstOrDefault();
if (variant != null)
{
variant.SetValue("Клиент");
}
And that gives me:
<messages>
<message id="1">
<variant language="en_US">Customer</variant>
<variant language="ru_RU">Клиент</variant>
</message>
<message id="2">
<variant language="en_US">Model</variant>
<variant language="ru_RU" />
</message>
</messages>