繁体   English   中英

使用LINQ to XML从WSDL解析xsd

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM