我正在尝试使用 XSD 文件构建字典,该文件是使用 LINQ to XML 从 WSDL 定义中获取的。
我试图解析的节点看起来像这样
<xsd:element maxOccurs="1" minOccurs="0" name="active" type="xsd:boolean"/>
<xsd:element maxOccurs="1" minOccurs="0" name="activity_due" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="additional_assignee_list" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="approval" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="approval_history" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="approval_set" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="assigned_to" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="assignment_group" type="xsd:string"/>
XML 文件的链接是:https://dl.dropboxusercontent.com/u/97162408/incident.xml
我只担心“getKeys”。
基本上是想构建一个字典,它将为我提供上述示例节点列表中“名称”和“类型”的键值对。
我已经到了可以使用代码访问节点列表的地步
XNamespace ns = XNamespace.Get("http://www.w3.org/2001/XMLSchema");
XDocument xd = XDocument.Load(url);
var result = (from elements in xd.Descendants(ns + "element") where elements.Attribute("name").Value.Equals("getKeys")
select elements.Descendants(ns + "sequence")
);
现在我想在单个函数调用中构建字典,而无需编写另一个例程来使用 LINQ to XML 解析结果列表。任何提示、代码示例都会非常有帮助!!
最佳答案
ToDictionary
是你的 friend 。您可以在一条语句中完成所有操作:
var query = xd
.Descendants(ns + "element")
.Single(element => (string) element.Attribute("name") == "getKeys")
.Element(ns + "complexType")
.Element(ns + "sequence")
.Elements(ns + "element")
.ToDictionary(x => (string) x.Attribute("name"),
x => (string) x.Attribute("type"));
基本上前三行找到唯一一个名称为 getKeys
的元素, 接下来的两三行选择 xsd:element
它下面的部分(如果你愿意,你可以只使用 Descendants(ns + "element")
),最后的调用将一系列元素转换为 Dictionary<string, string>
。 .
关于c# - 使用 LINQ to XML 从 WSDL 解析 xsd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37519802/