2009-05-08 14 views
1
XElement root = XElement.Load(xmlReader); 

IEnumerable<XElment> items = root.Elements("?????????"); 

パスを追加することはできますか、それとも単一のxml要素名でなければなりませんか?IEnumerableをロードする<XElement>コレクション

ie。/blah/blah2/asdfすることはできますか?

答えて

0

あなたは、この例外が発生しますXPathを渡ししようとする場合は、次のタイプ 「System.Xml.XmlException」が

未処理の例外が System.Xml.dll

で発生しました追加情報: '/' 文字、16進値0x2F、 は名前に含めることはできません。

要素名を文字列として渡す必要があります。その文字列は、XNameタイプに暗黙的に変換され、文字列内の文字とその文字列(/<>など)の制限があります。

1

いいえ、Element拡張メソッドのパラメータは、単一の要素名(実際にはXNameですが、名前空間が不要な場合は要素名を文字列として渡す必要があります)ではなく、XPathでなければなりません。

XPathを使用してXElementsを選択する場合は、an extension method for thatもあります。 System.Xml.XPathを含めると、次のようになります。

IEnumerable<XElement> items = root.XPathSelectElements("your/xpath"); 
3

????は単一のxml要素名にする必要があります。

厳密には、Elements()のメソッドはXName引数を受け入れます。幸いにも、からXNameへの暗黙の変換があります。

XName name = "Book"; 
XName name2 = "{http://schemas.company.com/books}Book"; // XName with a namespace 

System.Xml.XPath名前空間(System.Xml.Linqアセンブリ)から拡張メソッドを使用して、パスを選択するには:

IEnumerable<XElment> items = root.XPathSelectElements("Books/Author"); 
関連する問題