2011-08-22 51 views
3
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中的節點,但它會產生以下錯誤。請幫幫我。XPath異常SelectSingleNode

這是我的xml的一部分。我想刪除用戶選擇的路徑條目。對於我選擇的路徑是生成treeview。變量path4來自treeview選擇的路徑。

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

+2

你可以發佈你的xml嗎? 也嘗試/而不是\ 也 –

+2

你知道你實際上刪除哪個節點嗎?你能告訴我們路徑和XML嗎? – Remy

+1

請以文字形式發佈例外信息,而不是圖像。 – Amy

回答

0

正如馬克HOSANG mentionned,那是因爲你正在使用\代替/。 嘗試:

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

這應該做的伎倆;)

0

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

如何可以單元測試生成或解析XML文件,以避免這樣的問題?幾年前,我看到你發佈有關xml的文章,但你當時沒有提到任何測試。你有經驗嗎?任何想法分享?謝謝 – Ewoks

1

僅供參考,代碼應該

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. 您需要在讀取器周圍有一個using塊,以確保清除它,無論是否有例外。