我有一些XML需要弄清楚如何使用LINQ to XML进行查询。我正在考虑使用LinqPad来帮助我找出查询我想要访问的特定节点和属性所需的语法。
LinqPad是否能够查询我可以从剪贴板粘贴的一小块XML(只要格式良好)?我只看到连接数据库的能力。
如果可以输入要由LinqPad解析的XML blob?
编辑:我有LinqPad - 付费版 - v5
答案 0 :(得分:1)
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。
注意:这些查询并不完全相同。第一个为路径中的每个文档元素都有一个项目。第二个为每个模式,每个元素,每个注释和每个文档至少有一个项目,而不管文档是否作为后代。
答案 1 :(得分: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) */;