XElement root = XElement.Load(xmlReader);
IEnumerable<XElment> items = root.Elements("?????????");
哪里????是,我可以添加路径,还是必须是单个xml元素名称?
即。我能做/ blah / blah2 / asdf吗?
答案 0 :(得分: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");
答案 1 :(得分:1)
不,Elements扩展方法的参数需要是单个元素名称(实际上是XName,但如果您不需要名称空间,只需将元素名称作为字符串传递),而不是XPath。
如果要使用XPath选择XElements,还有an extension method for that。包括System.Xml.XPath并执行:
IEnumerable<XElement> items = root.XPathSelectElements("your/xpath");
答案 2 :(得分:0)
如果您尝试传递XPath,则会生成此异常:
未处理的类型异常 发生'System.Xml.XmlException' system.xml.dll的
其他信息:'/' 字符,十六进制值0x2F, 不能包含在名称中。
您必须将元素名称作为字符串传递。该字符串被隐含地转换为XName
类型,该字符对字符串中的字符可以和不可以存在限制(/
,<
,>
等。)。 / p>