XML Soap Get Element From Xelement

本文关键字:From Xelement Element Get Soap XML | 更新日期: 2023-09-27 18:32:08

我通过响应流获得的XML:

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <generateSSOResponse xmlns="http://url.com">
            <generateSSOReturn>2DKtjZNq58THggh42lNsGvgGTjF8RSBA</generateSSOReturn>
        </generateSSOResponse>
    </soapenv:Body>
</soapenv:Envelope>

该代码用于尝试获取"生成SSOResponse"令牌值。

var xmlDoc = XElement.Parse(s);
var ssoToken = xmlDoc.XPathSelectElement("/soapenv:Envelope[@xmlns:soapenv='"http://schemas.xmlsoap.org/soap/envelope/'"]/soapenv:Body/generateSSOResponse[@xmlns='"http://ws.configureone.com'"]/generateSSOReturn");

错误:需要命名空间管理器或 XsltContext。此查询具有 前缀、变量或用户定义的函数。

说我需要一个命名空间管理器? 我虽然那是在处理XMLdoc而不是xElement的时候? 这里的解决方案是什么?

编辑:变量"s"是响应流代码,如下所示:

using (var mem = new MemoryStream())
{
    rstream.CopyTo(mem);
    var b = mem.ToArray();
    var s = System.Text.Encoding.UTF8.GetString(b);

XML Soap Get Element From Xelement

老实说,按照预期使用 LINQ to XML 要简单得多:

XNamespace ns = "http://url.com";
var token = (string)doc.Descendants(ns + "generateSSOReturn").Single();

有关工作示例,请参阅此小提琴。 如果您确实想使用 XPath,那么是的,您需要一个命名空间管理器来允许 XPath 导航器解析表达式中的所有前缀。

顺便说一句,您也可以直接从流中解析 XML:

var doc = XDocument.Load(rstream);
好的,

所以Charles Mager在我尝试使用Xelement时使用XMLtoLINQ给出了答案。 然而,事实证明,嵌入代码的ERP不支持linq(无赖)。

因此,这是我在没有XMLtoLINQ的情况下获得的解决方案:

XmlDocument mydoc = new XmlDocument();
    XmlNamespaceManager manager = new XmlNamespaceManager(mydoc.NameTable);
    manager.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/"); 
    manager.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
    manager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
    manager.AddNamespace("rsp","http://url.com");

    mydoc.LoadXml(s);
    var mytoken = mydoc.SelectSingleNode("//rsp:generateSSOReturn", manager);

希望这能帮助任何和我处于同样困境的人。