XElement root = XElement.Load(xmlReader);
IEnumerable<XElment> items = root.Elements("?????????");
哪来的???是,我可以添加路径还是必须是单个 xml 元素名称?
IE。我可以做 /blah/blah2/asdf 吗?
???应该是单个 xml 元素名称。
严格地说,Elements()
方法接受一个XName
参数。幸运的是,存在从string
to的隐式转换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");
不,Elements 扩展方法的参数需要是单个元素名称(实际上是 XName,但如果您不需要命名空间,只需将元素名称作为字符串传递),而不是 XPath。
如果要使用 XPath 选择 XElements,还有一个扩展方法。包括 System.Xml.XPath 并执行:
IEnumerable<XElement> items = root.XPathSelectElements("your/xpath");
如果您尝试传递 XPath,您将生成此异常:
System.Xml.dll 中出现“System.Xml.XmlException”类型的未处理异常
附加信息:“/”字符,十六进制值 0x2F,不能包含在名称中。
您必须将元素名称作为字符串传递。该字符串被隐式转换为对字符串中XName
可以和不能包含哪些字符有限制的类型(/
、<
、>
等)。