如何在c#中解析以下xml?

时间:2017-03-10 11:19:27

标签: c# xml

我需要一些关于如何从此XML获取EnglishstudentId值的帮助。也许它需要一些我目前无法理解的特殊解析。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<processResponse xmlns="http://tempuri.org/">
    <processResult>
    <xml version="1.0" encoding="UTF-8"?>
        <returnedResponse>
            <English>94</English>
            <Remarks>Excellent</Remarks>
            <studentId>tst005</studentId>
            <Department>6</Department>
        </returnedResponse>
    </processResult>
</processResponse>
</soap:Body>
</soap:Envelope>

我尝试过以下代码:

XmlDocument xdr = new XmlDocument();
xdr.LoadXml(thexml);
XmlNodeList nodelist = xdr.SelectNodes("//processResponse/processResult/returnedResponse");

foreach (XmlNode node in nodelist) 
{
    string eng = node.SelectSingleNode("English").InnerText;
    Response.Write("eng");
}

4 个答案:

答案 0 :(得分:0)

1)XML在第6行无效 - &gt;因为它没有结束标记。如果您无法编辑服务并删除xml标头或对生成的xml进行编码,则必须删除消费者代码中的第6行。

2)您必须定义命名空间!

顺便说一下:我强烈推荐使用(Linq2XML)XDocument。您的代码可能如下所示:

XDocument xdr = XDocument.Parse(...);
var nodes = xdr.XPathSelectElements("//*[name()='returnedResponse']");

答案 1 :(得分:0)

您是否因无效的XML而出错,或者您的SelectNodes找不到任何内容?

这条路怎么样

jq 'map({a: .children[1].text, f: .children[0].text})' | \
jq 'map(select(.a != null))' | \
jq 'map(select(.f != null))' | \
jq 'map([.a, [.f,(.f | length)]])' | \
jq -c '.[]'

答案 2 :(得分:0)

您可以尝试使用SelectSingleNode,就像这样。

var English= xdr.DocumentElement.SelectSingleNode("English").InnerText;

var studentId = xdr.DocumentElement.SelectSingleNode("studentId").InnerText;

答案 3 :(得分:0)

试试这个

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
XmlNodeList nList = doc.GetElementsByTagName("returnedResponse");

foreach (XmlNode node in nList)
{
   XElement xelement = XElement.Parse(node.OuterXml);
   var Descendents = xelement.Descendants();
   foreach (var item in Descendents)
   {
     //you'll get each of your descendents here
   }
}