c# - 使用 LINQ to XML 从 WSDL 解析 xsd

标签 c# xml linq

我正在尝试使用 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/

相关文章:

c# - 如何在正则表达式中的特定术语后否定文件名

c# - 将 XML 元素读取到 ListView - 我如何将两个变量传递给方法

php - 如何以html无序列表形式而不是xml形式打印这些结果?

c# - 需要帮助使用 Entity Framework 导航属性过滤 LINQ 查询

c# - 我可以使用 LINQ 改进这个算法吗?

c# - 了解 C++ DLL 使用 union 映射到 C#

c# - 如何将参数从 C# 传递到 MATLAB?

c# - 使用 LINQ 更改集合中的项目

xml - 添加xml :lang to MVC XDocument

C# LINQ 查询 - 无隐式转换错误