5

大きな XML ファイルを解析しようとしましたが、XPath 式に多くの相対パスを使用しています。

現在、.net XPath 評価で問題が発生しています。

ここに私の問題を説明する小さな例があります:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
</book> 
</bookstore>

コードは次のとおりです。

static void Main(string[] args)
{
    System.Xml.XmlDocument d = new System.Xml.XmlDocument();
    d.Load(@"D:\simpleXml.xml");

    System.Diagnostics.Trace.WriteLine(d.SelectSingleNode("//price/..[year=\'2005\']").Name);
}

次のエラー メッセージが表示されます。

XMLSpy などの他のツールがその式を正常に評価するため、私にとっては有効な XPath 式のように思えます。

4

2 に答える 2

1

linq2xmlを使用しない理由

XDocument doc=XDocument.Load("yourXML");

var bookPrice=doc.Descendants("book")
.Where(x=>x.Element("year").Value=="2005")
.Select(y=>y.Element("price").Value);
//gets the price of the books published in 2005

xpathバージョンが必要な場合は、ここにあります

"bookstore/book[year='2005']/*/../price"
//gets the price of the books published in 2005
于 2012-10-22T14:53:34.597 に答える
0

http://www.w3.org/TR/xpath/#NT-Stepの XPath 仕様を見ると、Step プロダクションが次のように定義されていることがわかります。

Step  ::=  AxisSpecifier NodeTest Predicate*    
         | AbbreviatedStep

つまり、述語は、 などの省略されたステップをたどることはできません。または..したがって、実装は(厳密に)正しいと思います。おそらく、XMLSpy はその解釈においてもう少しリベラルであり、単純に常に .. をparent:node() に展開しますか?

于 2012-11-01T13:47:41.940 に答える