使用 LinqPad 查询 "blob" of XML

Using LinqPad to query a "blob" of XML

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

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

如果可能,我如何输入 XML blob 以供 LinqPad 解析?

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

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。

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

如果您习惯使用 VB,您可以简单地将 xml 内容粘贴到 VB expression/program 中。 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) */;