首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XPath异常SelectSingleNode

XPath异常SelectSingleNode
EN

Stack Overflow用户
提问于 2011-08-22 14:12:50
回答 3查看 2K关注 0票数 3
代码语言:javascript
复制
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);
 }

我在xml中使用以下代码删除节点,但它生成了以下错误。请帮帮我。

这是我的xml的一部分。我想删除用户选择的路径条目。对于选择路径,我生成了treeview。变量path4来自树视图选择的路径。

代码语言:javascript
复制
<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>
</WindowEntry>
<WindowEntry>
  <Name>tbwModel</Name>
  <View>TRN_MODEL</View>
  <LU>TrnModel</LU>
  <DefaultWindowText />
  <Flags>0</Flags>
</WindowEntry>
</WindowEntries>

EN

回答 3

Stack Overflow用户

发布于 2011-10-04 11:16:55

仅供参考,代码应该是

代码语言:javascript
复制
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. 除非您仍在使用.NET 1.1,否则不要使用new XmlTextReader()。它已经被替换为XmlReader.Create().
  2. You需要一个围绕阅读器的using块,以确保它被清理,而不管有什么异常。
票数 1
EN

Stack Overflow用户

发布于 2011-09-16 20:45:57

正如Mark Hosang提到的,这是因为您使用的是\而不是/。尝试:

代码语言:javascript
复制
path4 = path4.Replace("\\", "/");

这应该会起作用;)

票数 0
EN

Stack Overflow用户

发布于 2011-10-04 11:07:45

Xpath的格式必须正确: /node1/node2/.../nodeN

像这样修复,它是有效的:)

代码语言:javascript
复制
        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);

请参考Xpath语法:http://www.w3schools.com/xpath/xpath_syntax.asp

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7143739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档