Исключение XPath SelectSingleNode - PullRequest
       0

Исключение XPath SelectSingleNode

3 голосов
/ 22 августа 2011
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. Я хочу удалить выбранный пользователем путь. для выбора пути я был генерировать дерево. переменная path4 берется из дерева выбранного пути.

<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>

error window error2

Ответы [ 3 ]

1 голос
/ 04 октября 2011

К вашему сведению, код должен быть

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. Не используйте new XmlTextReader(), если вы все еще не используете .NET 1.1.Его заменили на XmlReader.Create().
  2. . Вам потребуется блок using вокруг считывателя, чтобы обеспечить его очистку независимо от исключений.
0 голосов
/ 04 октября 2011

Xpath должен быть в правильной форме: /node1/node2/.../nodeN
Исправить так, это работает:)

        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 голосов
/ 16 сентября 2011

Как отметил Марк Хосанг, это потому, что вы используете \ вместо /.Попробуйте:

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

это должно сработать;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...