2009-05-08 2 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

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

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

1

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

Если вы хотите выбрать XElements, используя XPath, есть также an extension method for that. Включить System.Xml.XPath и do:

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

???? должно быть единственным именем элемента 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");