Измените существующее дочернее значение XML с помощью textbox.text

#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>