从asp.net中的Xdocument中的Complex Xml获取特定标记值

时间:2018-01-20 09:02:28

标签: c# asp.net xml tags

因为我是初学者我当然需要你的帮助。 我想从Xdocument获取一个特定标签。 以下是Xdocument中的内容:

<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>
    <UcicLoginResponse xmlns="http://tempuri.org/">
      <UcicLoginResult>
        <Success>true</Success>
        <authToken>xxxxxxx</authToken>
      </UcicLoginResult>
    </UcicLoginResponse>
  </soap:Body>
</soap:Envelope>

然后我想获得标签authToken的值。 尝试使用下降和元素。但是,由于xml属性,所有尝试leds to error.Anyone请帮助我...

我的一些尝试给出:

 XDocument _Xresult = XDocument.Parse(XmlResponse.Elements().Single().Value);
 IEnumerable<XElement> xResponseItem = _Xresult.Descendants("UcicLoginResult");
                if (xResponseItem.Descendants("Remarks").Any())
                {
                    string sErr = _Xresult.Element("Remarks").Value;
                    throw new Exception("Authentication failed : " + sErr);
                }
                token = _Xresult.Descendants("authToken").FirstOrDefault().Value;
var root = XmlResponse.Root;
var res1= root.Elements("UcicLoginResult").Elements("authToken").FirstOrDefault().Value;
var resp=XmlResponse.Descendants("soap:Envelope").Descendants("soap:Body").Descendants("UcicLoginResponse").Descendants("UcicLoginResult").Elements("authToken");
IEnumerable<XElement> xResponseItem =XmlResponse.Descendants("UcicLoginResponse");

string sErr = xResponseItem.Descendants("UcicLoginResult").FirstOrDefault().Element("authToken").Value;
var res = XmlResponse.Descendants("soap:Envelope").Descendants("soap:Body").Descendants("UcicLoginResponse").Descendants("UcicLoginResult").Elements("authToken");

1 个答案:

答案 0 :(得分:3)

您没有指定命名空间。 http://tempuri.org/;

var xDocument = XDocument.Parse(xml);
XNamespace ns = "http://tempuri.org/";
var authToken = xDocument.Descendants(ns + "authToken").FirstOrDefault();

我不知道xml来自哪里,但似乎你正在与SOAP服务进行通信,最好将数据作为基于WCF客户端的对象获取。