2011-08-22 3 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); 
} 

다음 코드를 사용하여 my XML의 노드를 제거하지만 다음과 같은 오류가 발생합니다. 도와주세요.XPath 예외 SelectSingleNode

이것은 내 XML의 일부입니다. 사용자가 선택한 경로 항목을 제거하고 싶습니다. 선택 경로에 대한 내가 treeview을 생성했다. 변수 path4는 treeview 선택된 경로에서옵니다. 당신이 대신 /\을 사용하고 있기 때문에 마크 Hosang가 했나요으로

<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도 게시 할 수 있습니까? try// 대신 \ –

+2

실제로 제거중인 노드를 알고 있습니까? 경로와 XML을 보여줄 수 있습니까? – Remy

+1

예외 정보는 이미지가 아닌 텍스트로 게시하십시오. – Amy

답변

0

, 그것은이다. 시도 :이 트릭을 할해야

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

참고로, 코드를 당신이 .NET 1.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. new XmlTextReader()를 사용하지 마십시오해야합니다. 그것은 XmlReader.Create()으로 대체되었습니다.
  2. 예외에 관계없이 판독기 주위에 using 블록이 필요하므로 정리해야합니다.