解析 XML SOAP 响应 C#
Posted
技术标签:
【中文标题】解析 XML SOAP 响应 C#【英文标题】:Parsing XML SOAP Response C# 【发布时间】:2021-06-07 20:54:13 【问题描述】:我一直在努力尝试使用 Linq(根本不是 Linq 的任何附件,它只是我发现的示例中最常用的)解析下面的 XML Soap 响应。我已经尝试了一些已经在 *** 上发布的类似答案,但它们都没有处理 XML 结构的不同元素上的这些多个命名空间。 SOAP 响应是一团糟,我知道,但它是给定的。我唯一需要的是 itemID 字段中的值(即 MyITItemName)
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header
xmlns:ns="http://services.mycompany.biz/it/managementservice/ITSMIT/1/"
xmlns:ns1="http://schemata.mycompany.biz/it/managementservice/ITSMIT/1/"/>
<soapenv:Body
xmlns:ns="http://services.mycompany.biz/it/managementservice/ITSMIT/1/"
xmlns:ns1="http://schemata.mycompany.biz/it/managementservice/ITSMIT/1/">
<ns1:createItemResponse
xmlns:ns1="http://services.mycompany.biz/it/managementservice/ITSMIT/1/">
<ns2:id
xmlns:ns2="http://schemata.mycompany.biz/it/managementservice/ITSMIT/1/">338632
</ns2:id>
<ns2:itemID
xmlns:ns2="http://schemata.mycompany.biz/it/managementservice/ITSMIT/1/">MyITItemName
</ns2:itemID>
</ns1:createItemResponse>
</soapenv:Body>
</soapenv:Envelope>
任何人都可以对此有所了解(或一些代码:-))吗?
【问题讨论】:
【参考方案1】:因此,如果您知道您一直在寻找 ns2:itemID(MyITItemName 位于其中),您将需要访问子节点。我在下面有一个工作示例。我把你的 xml 文件保存为我的下载文件夹中的 xml 文件。
void Main()
// replace this configFile location to where you save your xml file
GetClientNoteXmlData("MyITItemName", @"C:\Users\first.last\Downloads\test.xml");
public void GetClientNoteXmlData(string client, string configFile)
XmlDocument doc = new XmlDocument();
doc.Load(configFile);
XmlElement root = doc.DocumentElement;
if (root != null)
XmlNodeList list = root.GetElementsByTagName("ns2:itemID");
foreach (XmlNode node in list)
Console.WriteLine(node.InnerXml);
Console.WriteLine(node.OuterXml);
【讨论】:
【参考方案2】:您可以使用 Linq to XML 获取 itemId,尤其是 XDocument :
string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"">
<soapenv:Header
xmlns:ns=""http://services.mycompany.biz/it/managementservice/ITSMIT/1/""
xmlns:ns1=""http://schemata.mycompany.biz/it/managementservice/ITSMIT/1/""/>
<soapenv:Body
xmlns:ns=""http://services.mycompany.biz/it/managementservice/ITSMIT/1/""
xmlns:ns1=""http://schemata.mycompany.biz/it/managementservice/ITSMIT/1/"">
<ns1:createItemResponse
xmlns:ns1=""http://services.mycompany.biz/it/managementservice/ITSMIT/1/"">
<ns2:id xmlns:ns2=""http://schemata.mycompany.biz/it/managementservice/ITSMIT/1/"">338632</ns2:id>
<ns2:itemID xmlns:ns2=""http://schemata.mycompany.biz/it/managementservice/ITSMIT/1/"">MyITItemName</ns2:itemID>
</ns1:createItemResponse>
</soapenv:Body>
</soapenv:Envelope>";
XNamespace ns2 = "http://schemata.mycompany.biz/it/managementservice/ITSMIT/1/";
string itemId = XDocument.Parse(xml)
.Descendants(ns2 + "itemID")
.FirstOrDefault()
.Value;
希望对您有所帮助。
【讨论】:
Nelson 的回答解决了我的问题,我接受了。但是您的回答确实非常酷,有见地且完整。非常感谢,@Sajid!以上是关于解析 XML SOAP 响应 C#的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 和 XDocument/XElement 解析 Soap 响应