【问题标题】:Loading a IEnumerable<XElement> collection加载 IEnumerable<XElement> 集合
【发布时间】:2009-05-08 14:23:19
【问题描述】:
XElement root = XElement.Load(xmlReader);

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

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

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

【问题讨论】:

    标签: asp.net xelement


    【解决方案1】:

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

    严格来说,Elements() 方法接受 XName 参数。幸运的是,有一个从 stringXName 的隐式转换。

    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");
    

    【讨论】:

      【解决方案2】:

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

      如果要使用 XPath 选择 XElements,还有an extension method for that。包括 System.Xml.XPath 并执行:

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

      【讨论】:

        【解决方案3】:

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

        未处理的类型异常 'System.Xml.XmlException' 发生在 System.Xml.dll

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

        您必须将元素名称作为字符串传递。该字符串被隐式转换为 XName 类型,该类型对字符串中可以和不能出现的字符有限制(/&lt;&gt; 等)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多