如果字符串x中有字母,为什么不运行此函数?

问题描述:

我有这个功能可以删除一些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样本。 –

如果x仅包含数字,则XPath将该值解释为数字。如果x也包含字母,则将其解释为字符串并需要引用:

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

显然,当x包含引号时它将不起作用,但应该不同重复 –

+0

通常最好避免使用字符串连接来构造XPath表达式,部分原因是由于转义特殊字符的问题以及部分(相关)注射攻击。使用允许在XPath表达式中设置参数的API。如何用微软的XPath API做到这一点并不明显,但我记得有人解释了最近如何用XPathNavigator做到这一点 - 尽管如此却找不到问题。 –