我需要一些关于如何从此XML获取English
和studentId
值的帮助。也许它需要一些我目前无法理解的特殊解析。
<?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");
}
答案 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
}
}