如果字符串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 { }
}
}
如果x
仅包含数字,则XPath将该值解释为数字。如果x
也包含字母,则将其解释为字符串并需要引用:
xmldoc.SelectSingleNode("//Reservedele/Component[Varenummer='" + x + "']");
^ ^
显然,当x包含引号时它将不起作用,但应该不同重复 –
通常最好避免使用字符串连接来构造XPath表达式,部分原因是由于转义特殊字符的问题以及部分(相关)注射攻击。使用允许在XPath表达式中设置参数的API。如何用微软的XPath API做到这一点并不明显,但我记得有人解释了最近如何用XPathNavigator做到这一点 - 尽管如此却找不到问题。 –
发布一个有问题的xml样本。 –