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>
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);
}
- Don't use
new XmlTextReader()
unless you're still on .NET 1.1. It's been replaced withXmlReader.Create()
. - 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
精彩评论