【问题标题】:Using LinqPad to query a "blob" of XML使用 LinqPad 查询 XML 的“blob”
【发布时间】:2018-01-11 15:15:14
【问题描述】:

我有一些 XML,我需要弄清楚如何使用 LINQ to XML 进行查询。我正在考虑使用 LinqPad 来帮助我找出查询我想要访问的特定节点和属性所需的语法。

LinqPad 是否能够仅查询我可以从剪贴板粘贴的 XML 块(只要格式正确)?我只看到了连接数据库的能力。

如果可以的话,我该如何输入要被 LinqPad 解析的 XML blob?

编辑:我有 LinqPad - 付费版 - v5

【问题讨论】:

    标签: linq-to-xml linqpad


    【解决方案1】:

    如果您习惯使用 VB,您可以简单地将您的 xml 内容粘贴到 VB 表达式/程序中。 VB 支持 XML 文本并将它们视为 XDocument/XElement(取决于 xml 声明的存在)。然后您可以使用 VB 的查询语法编写查询。

    否则,如果您更喜欢 C#,这是我通常如何使用原始 XML 的模板。

    // C# Program
    void Main()
    {
        var doc = XDocument.Parse(XmlStr);
        // do stuff with doc
        doc.Dump(); // if you want to reformat your xml
    }
    
    string XmlStr { get; } = /* paste your xml here as an escaped string (Alt + Shift + V) */;
    

    【讨论】:

      【解决方案2】:

      LINQPad 的连接是数据上下文。您可能会找到或编写 XML 驱动程序,但它甚至可能不值得一看。只需从脚本中的 .NET 代码访问 XML,并将源作为文件或剪贴板。

      LINQ to XML 主要是指 XDocument 等。 XDocument.Load 或 .Parse 将帮助您入门。

      以下是使用 LINQ to XML 查询剪贴板上的 XML 架构的两种方法:

      XNamespace xsd = "http://www.w3.org/2001/XMLSchema";
      
      // pure drilldown, step by step
      XDocument.Parse(System.Windows.Clipboard.GetText())
          .Element(xsd + "schema")
          .Elements(xsd + "element")
          .Elements(xsd + "annotation")
          .Elements(xsd + "documentation")
          .Select(d => new { element = d.Parent.Parent.Attribute("name")?.Value, type = d.Parent.Parent.Attribute("type")?.Value, documentation = d?.Value})
          .Dump();
      
      // alternative syntax, which has range variables that can be referenced in the select
      
      (from schema in XDocument.Parse(System.Windows.Clipboard.GetText()).Elements(xsd + "schema")
      from element in schema.Elements(xsd + "element")
      from annotation in element.Elements(xsd + "annotation")
      from documentation in annotation.Elements(xsd + "documentation")
      select new {element = element.Attribute("name")?.Value, type = element.Attribute("type")?.Value, documentation?.Value})
          .Dump();
      

      如果您熟悉 XPathSelectElements 等,也可以使用 XPath。

      注意:这些查询并不完全相同。第一个对路径中的每个文档元素都有一个项目。第二个对于每个模式、每个元素、每个注释和每个文档都至少有一个项目,无论是否有一个文档作为后代。

      【讨论】:

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