1
XElement root = XElement.Load(xmlReader);

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

哪来的???是,我可以添加路径还是必须是单个 xml 元素名称?

IE。我可以做 /blah/blah2/asdf 吗?

4

3 回答 3

3

???应该是单个 xml 元素名称。

严格地说,Elements()方法接受一个XName参数。幸运的是,存在从stringto的隐式转换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");
于 2009-05-08T14:38:08.203 回答
1

不,Elements 扩展方法的参数需要是单个元素名称(实际上是 XName,但如果您不需要命名空间,只需将元素名称作为字符串传递),而不是 XPath。

如果要使用 XPath 选择 XElements,还有一个扩展方法。包括 System.Xml.XPath 并执行:

IEnumerable<XElement> items = root.XPathSelectElements("your/xpath");
于 2009-05-08T14:29:42.560 回答
0

如果您尝试传递 XPath,您将生成此异常:

System.Xml.dll 中出现“System.Xml.XmlException”类型的未处理异常

附加信息:“/”字符,十六进制值 0x2F,不能包含在名称中。

您必须将元素名称作为字符串传递。该字符串被隐式转换为对字符串中XName可以和不能包含哪些字符有限制的类型(/<>等)。

于 2009-05-08T14:28:52.080 回答