开发者

XPath Exception SelectSingleNode

private void toolStripButton2_Click(object sender, EventArgs e)
{
        XmlTextReader reader = new XmlTextReader("component.xml");
        XmlDocument doc = new XmlDocument();
        doc.Load(reader);
        string path4 = treeView1.SelectedNode.FullPath.ToString();

        XmlNode nodeToRemove = doc.SelectSingleNode(path4);
        XmlNode parentNode = nodeToRemove.ParentNode;
        parentNode.RemoveChild(nodeToRemove);
 }

i use following code for remove node in my xml but it generate following errors. please help me.

this is the part of my xml. i want to remove user selected path Entry. for select path i was generate treeview. variable path4 come from treeview selected path.

<WindowEntries>
<WindowEntry>
  <Name>tbwUnitOverview</Name>
  <View>TRN_UNIT</View>
  <LU>TrnUnit</LU>
  <DefaultWindowText />
  <Flags>0</Flags>
</WindowEntry>
<WindowEntry>
  <Name>tbwBrandOverView</Name>
  <View>TRN_BRAND</View>
  <LU>TrnBrand</LU>
  <DefaultWindowText />
  <Flags>0</Flags>
</WindowEntry>
<WindowEntry>
  <Name>tbwProductCategory</Name>
  <View>TRN_PROD_CATEGORY</View>
  <LU>TrnProdCategory</LU>
  <DefaultWindowText />
  <Flags>0</Flags>
</WindowEnt开发者_JAVA百科ry>
<WindowEntry>
  <Name>tbwModel</Name>
  <View>TRN_MODEL</View>
  <LU>TrnModel</LU>
  <DefaultWindowText />
  <Flags>0</Flags>
</WindowEntry>
</WindowEntries>

XPath Exception SelectSingleNode

XPath Exception SelectSingleNode


FYI, the code should be

using (XmlReader reader = XmlReader.Create("component.xml"))
{
    XmlDocument doc = new XmlDocument();
    doc.Load(reader);
    string path4 = treeView1.SelectedNode.FullPath.ToString();

    // now replace '\' by '/'
    path4 = path4.Replace('\\', '/');

    XmlNode nodeToRemove = doc.SelectSingleNode(path4);
    XmlNode parentNode = nodeToRemove.ParentNode;
    parentNode.RemoveChild(nodeToRemove);
}
  1. Don't use new XmlTextReader() unless you're still on .NET 1.1. It's been replaced with XmlReader.Create().
  2. You need a using block around the reader to ensure it is cleaned up, regardless of exceptions.


As Mark Hosang mentionned, it is because your are using \ instead of /. Try :

path4 = path4.Replace("\\", "/");

this should do the trick ;)


The Xpath must be in correct form: /node1/node2/.../nodeN
Fix like this, it works :)

        XmlTextReader reader = new XmlTextReader("data.xml");
        XmlDocument doc = new XmlDocument();
        doc.Load(reader);
        string path4 = treeView1.SelectedNode.FullPath.ToString();       

        // now replace '\' by '/'
        path4 = path4.Replace('\\', '/');
        // appending '/' at beginning
        path4 = "/" + path4;           

        XmlNode nodeToRemove = doc.SelectSingleNode(path4);
        XmlNode parentNode = nodeToRemove.ParentNode;
        parentNode.RemoveChild(nodeToRemove);


Please refer to Xpath syntax: http://www.w3schools.com/xpath/xpath_syntax.asp

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜