2017-02-17 8 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で最近行う方法を説明している人を思い出してください。 –

関連する問題