使用 textbox.text 更改现有 XML 子值

Posted

技术标签:

【中文标题】使用 textbox.text 更改现有 XML 子值【英文标题】:Change existing XML child value with textbox.text 【发布时间】:2021-01-23 10:50:17 【问题描述】:

我一直在尝试将 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 添加到现有子节点的最佳方法?

【问题讨论】:

elList 不为空吗? 【参考方案1】:

elList 变量是 null,因为您忘记了 XPath 中的 root 节点。如果只有一个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>

【讨论】:

以上是关于使用 textbox.text 更改现有 XML 子值的主要内容,如果未能解决你的问题,请参考以下文章

使用 XSLT 为 Excel 转换现有 XML

文本框文本在WPF中更改了事件

选择数字之间的大小写

c# winform中读取字符串?

如何在单击或更改时获取 $(this) 选择器的值

更改 Hadoop 中现有文件的块大小