我想在产品节点下添加一个名为 list 的节点。
XAML 中的代码是:
<Window.Resources>
<XmlDataProvider x:Name="myDP" x:Key="MyData" Source="Product.xml" XPath="products"
IsAsynchronous="False" IsInitialLoadEnabled="True"
PresentationTraceSources.TraceLevel="High">
</XmlDataProvider>
</Window.Resources>
addIdtm_button是:
private void addItem_Click_1(object sender, RoutedEventArgs e)
{
try
{
XmlDataProvider provider = (XmlDataProvider)this.FindResource("MyData");
XmlNode elmnt = provider.Document.CreateElement("item");
elmnt.InnerText = itemTextBox.Text;
provider.Document.ChildNodes[0].AppendChild(elmnt);
}
catch (Exception d)
{
MessageBox.Show(d.Message);
}
}
单击按钮时,将显示消息框:"当前节点不能包含其他节点。"
我现在能做什么???
您将追加到文档的第一个子项。 provider.Document.ChildNodes[0]
会返回XmlDeclaration, Value="version="1.0" encoding="utf-8"
.因此,请改用将返回产品节点的provider.Document.ChildNodes[1]
。
修改代码后,addItem_Click_1
如下所示:
private void addItem_Click_1(object sender, RoutedEventArgs e)
{
try
{
XmlDataProvider provider = (XmlDataProvider)this.FindResource("MyData");
XmlNode elmnt = provider.Document.CreateElement("list");
elmnt.InnerText = itemTextBox.Text;
(provider.Document.ChildNodes[1]).ChildNodes[0].AppendChild(elmnt);
// Assuming that your XML file is in the same directory as you exe. If not, then
// give the right path as parameter to Save
provider.Document.Save("Product.xml");
}
catch (Exception d)
{
MessageBox.Show(d.Message);
}
}
在上面的代码中,provider.Document.ChildNodes[1]
将从 XML 文件返回products
节点。 (provider.Document.ChildNodes[1]).ChildNodes[0]
将返回product
节点,您应该AppendChild