2017-02-17 1 views
0

일부 XML을 삭제하는 기능이 있습니다. 그것은 숫자로만 실행되지만, 문자열에 문자가 있다면, 실행되지 않을 것입니다. 그리고 그것이 혼합 (숫자와 문자)이라면 나는 오류가납니다. 누구든지 나를 도울 수 있습니까?문자열 x에 문자가있는 경우 왜이 함수가 실행되지 않습니까?

내가 오류가

"System.Xml.XPath.XPathException이다. '// Reservedele/컴포넌트 [Varenummer = 123eg]'이있는 불법 토큰

//Udfør sletning af vare i map 
protected void btnUdførSlet_Click(object sender, EventArgs e) 
{ 
    string x = txtSletVare.Text; 
    functions func = new functions(); 
    bool exists = func.checForMatch(txtSletVare.Text); 

    XmlDocument xmldoc = new XmlDocument(); 
    xmldoc.Load(Server.MapPath(map)); 
    //XmlNodeList nodes = xmldoc.SelectNodes("//Component[Varenummer=" + x + "]"); 
    XmlNode noteTodelete = xmldoc.SelectSingleNode("//Reservedele/Component[Varenummer=" + x + "]"); 

    if (exists != true) 
    { 
     lblFejlSletVare.Text = "Varenummeret findes ikke"; 
    } 
    else 
    { 
     try 
     { 
      if (noteTodelete != null) 
      { 
       noteTodelete.ParentNode.RemoveChild(noteTodelete); 
      } 
      xmldoc.Save(Server.MapPath(map)); 
      sletImapBackUp(); 
     } 
     catch { } 


    } 
} 
+0

잘못된 xml 샘플도 게시하십시오. –

답변

2

x에 숫자 만 들어있는 경우 XPath는이 값을 숫자로 해석합니다. x에도 문자가 포함되어 있으면 문자열로 해석되므로 따옴표로 묶어야합니다.

xmldoc.SelectSingleNode("//Reservedele/Component[Varenummer='" + x + "']"); 
                  ^  ^
+0

분명히 x가 따옴표를 포함하고 있지만 다른 복사본이어야합니다 분명히 작동하지 않습니다 –

+0

일반적으로 특수 문자를 이스케이프 문제로 인해 부분적으로 문자열 연결을 사용하여 XPath 표현을 생성하지 않는 것이 가장 좋습니다. 주입 공격. XPath 표현식에서 매개 변수를 설정할 수있는 API를 사용하십시오. Microsoft의 XPath API로이를 수행하는 방법은 분명하지 않지만 최근에 XPathNavigator를 사용하여이를 수행하는 방법을 설명하는 사람을 기억합니다. 질문을 찾을 수 없습니다. –

관련 문제