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

この状況を確実に処理するには、基本的に 2 つの方法があります。

最初の方法は、 を定義し、VariableContext使用する値を XPath 変数に入れることです。次に、次のような式を使用できます。

//somePath/FieldData[@Location = $user]/@Value

この投稿でその方法を説明します。VariableContext適切なものが .NET に組み込まれていないため、クラスを作成する必要がありますが、提供する例はほとんどの場合にそのまま機能するはずです。

もう 1 つのオプションは、Linq-to-XML を使用することです。そのルートに行く場合は、XPath の代わりに Linq を使用してノードをクエリでき、この方法では区切り文字は問題になりません。

// 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 に答える