[英]parsing xsd from WSDL using LINQ to XML
我正在尝试使用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
是您的朋友在这里。 您可以在一条语句中完成所有操作:
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>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.