问题描述
我一直在尝试将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
变量为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>