2

我有以下代码

XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr;
expr = nav.Compile("//somePath/FieldData[@Location='Payer's Name']/@Value");

单引号给出异常 System.Xml.XPath.XPathException。我试过用斜杠('\'),('),双单引号转义它。但似乎没有任何效果。知道如何解决这个问题吗?

4

5 回答 5

1

基本上有两种方法可以可靠地处理这种情况。

第一种方法是定义 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();
于 2014-12-27T17:02:17.930 回答
0

请注意,单引号(麻烦制造者)已替换为双引号。

string sUser = "Payer's name"; // as per OP requirement considering only single quote expr = nav.Compile("//somePath/FieldData[@Location=\"" + sUser + "\"]/@Value")

于 2014-12-27T15:59:50.583 回答
0
expr = nav.Compile("//somePath/FieldData[@Location=\"Payer's Name\"]/@Value");
于 2014-12-27T20:57:06.760 回答
0

你不能在 xpath 中有空格 "[@Location='Player's Name'] 取出空格

于 2014-12-27T15:31:17.130 回答
0

如果您使用 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.
    }
}
于 2014-12-27T17:51:51.673 回答