我有以下代码
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr;
expr = nav.Compile("//somePath/FieldData[@Location='Payer's Name']/@Value");
单引号给出异常 System.Xml.XPath.XPathException。我试过用斜杠('\'),('),双单引号转义它。但似乎没有任何效果。知道如何解决这个问题吗?
我有以下代码
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr;
expr = nav.Compile("//somePath/FieldData[@Location='Payer's Name']/@Value");
单引号给出异常 System.Xml.XPath.XPathException。我试过用斜杠('\'),('),双单引号转义它。但似乎没有任何效果。知道如何解决这个问题吗?
基本上有两种方法可以可靠地处理这种情况。
第一种方法是定义 aVariableContext
并将要使用的值放入 XPath 变量中。然后你可以使用如下表达式:
//somePath/FieldData[@Location = $user]/@Value
我在这篇文章中描述了如何做到这一点。它需要创建一个VariableContext
类,因为 .NET 中没有内置任何合适的内容,但我提供的示例在大多数情况下应该可以按原样工作。
另一种选择是使用 Linq-to-XML。如果你走这条路,你可以使用 Linq 而不是 XPath 查询节点,这样分隔符就不是问题了:
// here the doc variable is an XElement or XDocument
var value = (from fd in doc.Descendants("FieldData")
where (string)fd.Attribute("Location") == sUser
select fd.Attribute("Value")).FirstOrDefault();
或使用其他 Linq 语法:
var value = doc.Descendants("FieldData")
.Where(fd => (string)fd.Attribute("Location") == sUser)
.Select(fd => fd.Attribute("Value"))
.FirstOrDefault();
请注意,单引号(麻烦制造者)已替换为双引号。
string sUser = "Payer's name"; // as per OP requirement considering only single quote
expr = nav.Compile("//somePath/FieldData[@Location=\"" + sUser + "\"]/@Value")
expr = nav.Compile("//somePath/FieldData[@Location=\"Payer's Name\"]/@Value");
你不能在 xpath 中有空格 "[@Location='Player's Name'] 取出空格
如果您使用 C# 语言,有什么理由不能使用 LINQ?
using System.Xml.Linq;
public class XmlParser
{
public XDocument doc { get; set;}
public XmlParser (XDocument doc)
{
this.doc = doc;
}
public List<XElement> searchElements (String elementName)
{
return doc.Elements(elementName).ToList<XElement>(); //this will search for all child nodes and return the elements with the specified name.
}
}