1

我想在产品节点下添加一个名为 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);
     }
 }

单击按钮时,会显示MessageBox:“当前节点不能包含其他节点。”

我现在能做什么???

4

1 回答 1

0

您正在附加到文档的第一个孩子。provider.Document.ChildNodes[0]将返回XmlDeclaration, Value="version=\"1.0\" encoding=\"utf-8\"。所以改为使用provider.Document.ChildNodes[1]which 将返回产品节点。

修改代码后,您的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);
    }
}

在上面的代码中,将从XML 文件provider.Document.ChildNodes[1]返回节点。将返回您应该返回的节点products(provider.Document.ChildNodes[1]).ChildNodes[0]productAppendChild

于 2015-01-13T06:12:39.950 回答