Загрузка коллекции IEnumerable <XElement> - PullRequest
1 голос
/ 08 мая 2009
XElement root = XElement.Load(xmlReader);

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

где то ???? есть, я могу добавить путь, или это должно быть одно имя элемента XML?

есть. можно сделать / бла / бла2 / asdf?

Ответы [ 3 ]

3 голосов
/ 08 мая 2009

???? должно быть одним именем элемента XML.

Строго говоря, методы Elements() принимают аргумент XName. К счастью, существует неявное преобразование из string в 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");
1 голос
/ 08 мая 2009

Нет, параметр метода расширения Elements должен быть одним именем элемента (на самом деле XName, но если вам не нужны пространства имен, просто передайте имя элемента в виде строки), а не XPath.

Если вы хотите выбрать XElements с помощью XPath, для этого также есть метод расширения . Включите System.Xml.XPath и выполните:

IEnumerable<XElement> items = root.XPathSelectElements("your/xpath");
0 голосов
/ 08 мая 2009

Если вы попытаетесь передать XPath, вы сгенерируете это исключение:

Необработанное исключение типа «System.Xml.XmlException» произошло в System.Xml.dll

Дополнительная информация: «/» символ, шестнадцатеричное значение 0x2F, не может быть включено в имя.

Вы должны передать имя элемента в виде строки. Эта строка является безразличным преобразованием в тип XName, который имеет ограничения на то, какие символы могут и не могут быть в строке (/, <, > и т. Д.).

...