#c# #xml #wpf #child-nodes
#c# #xml #wpf #дочерние узлы
Вопрос:
Я пытался применить TextBox.Text
значения к своим существующим узлам XML-файла, я перепробовал много способов, но, похоже, это не помогает.
Мой код:
private void btnAddId_Click(object sender, RoutedEventArgs e)
{
if (tbAddId.Text == "")
{
MessageBox.Show("No value was given!");
}
else if (tbAddId.Text == "Add ID")
{
MessageBox.Show("No value was given!");
}
else
{
XmlDocument Xdoc = new XmlDocument();
string xmldoc = (@"// path to my xml file");
Xdoc.Load(xmldoc);
XmlElement elList = (XmlElement)Xdoc.SelectSingleNode("/filter/filter_item");
if (elList != null)
{
XmlNode node = Xdoc.SelectSingleNode("filter_item");
node.InnerText = tbAddId.Text;
elList.AppendChild(node);
}
Xdoc.Save(xmldoc);
}
}
Мой xml:
<?xml version="1.0"?>
<root>
<filter>
<!-- Copy filter-item and put the order-id in as the value to skip it-->
<filter_item>
</filter_item>
</filter>
</root>
Кто-нибудь знает лучший способ добавления TextBox.Text
к существующему дочернему узлу?
Комментарии:
1.
elList
Не является нулевым?
Ответ №1:
elList
Переменная null
, потому что вы забыли root
узел в XPath. Если есть только один filter_item
узел, как я предполагаю из вашего использования SelectSingleNode
, это должно сработать:
XmlDocument Xdoc = new XmlDocument();
string xmldoc = (@"// path to my xml file");
Xdoc.Load(xmldoc);
var filterItemNode = Xdoc.SelectSingleNode("root/filter/filter_item");
if (filterItemNode != null)
filterItemNode.InnerText = tbAddId.Text;
Xdoc.Save(xmldoc);
Это приведет к следующему XML-документу:
<?xml version="1.0"?>
<root>
<filter>
<filter_item>Text from the TextBox</filter_item>
</filter>
</root>