1

検索基準に対して 1 つ以上のレコードを取得するために XML ドキュメントを検索する最良の方法は何ですか。提案を歓迎します。

4

3 に答える 3

7

個人的には、可能であればLINQ to XMLを使用したいと思います。あなたの質問は現時点では非常に漠然としていますが、たとえば、次のように書くことができます。

XDocument doc = XDocument.Load("test.xml");
var matches = doc.Descendants("Person")
                 .Where(x => (string) x.Attribute("Name") == "Jon")
                 .Where(x => x.Elements("Child").Count() >= 2);

XPath を使用することはできますが、一般的には使用しないことを好みます。ある言語を別の言語に埋め込むという通常の問題がすべてありますが、LINQ to XML を使用すると、全体で C# を使用しているため、新しい構文を学ぶ必要はありません。関連するメソッドだけです。 LINQ to XML ライブラリ内。

また、LINQ to XML では名前空間の処理が簡単になります。クエリはすべて文字列ではなくコードで行われるため、値のエスケープなどについて心配する必要はありません。

于 2012-07-10T04:08:08.410 に答える
2

.net xml ドキュメントは、xpath を適切にサポートしています。

ほとんどの xml 検索で機能するはずです。

XPathの例を見てみましょう

于 2012-07-10T04:07:39.100 に答える
1

次のようにXmlDocument.SelectNodesまたはSelectSingleNodeで使用XPathします。

XmlDocument doc = new XmlDocument();
doc.Load("bookstore.xml");
XmlNode root = doc.DocumentElement;

// Add the namespace.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("bk", "urn:newbooks-schema");

// Select and display the first node in which the author's 
// last name is Kingsolver.
XmlNode node = root.SelectSingleNode(
"descendant::bk:book[bk:author/bk:last-name='Kingsolver']", nsmgr);
Console.WriteLine(node.InnerXml);
于 2012-07-10T05:10:30.507 に答える