代码之家  ›  专栏  ›  技术社区  ›  Tronics

尝试读取xml元素中的数据

  •  0
  • Tronics  · 技术社区  · 1 年前

    我有以下xml

    <soap:Envelope 
        xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
        xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope">
            <wsa:Action>http://cdr.ffiec.gov/public/services/RetrieveFacsimileResponse</wsa:Action>
            <wsa:MessageID>urn:uuid:f1c95072-c1ab-44f4-9c8f-59a26e28fce8</wsa:MessageID>
            <wsa:RelatesTo>urn:uuid:0f4a548e-39ad-4b5f-be02-ad9eaae75e32</wsa:RelatesTo>
            <wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
            <wsse:Security>
                <wsu:Timestamp wsu:Id="Timestamp-ee96d970-c821-455d-9f92-75085fcad001">
                <wsu:Created>2024-06-10T20:27:43Z</wsu:Created>
                <wsu:Expires>2024-06-10T20:32:43Z</wsu:Expires>
                </wsu:Timestamp>
            </wsse:Security>
        </env:Header>
        <soap:Body>
            <RetrieveFacsimileResponse xmlns="http://cdr.ffiec.gov/public/services">
                <RetrieveFacsimileResult>TestData==</RetrieveFacsimileResult>
            </RetrieveFacsimileResponse>
        </soap:Body>
    </soap:Envelope>
    

    我正在尝试读取里面的数据 检索传真结果 这样地。

    XmlDocument MyDoc = new XmlDocument(); 
    MyDoc.LoadXml(response.Content);
    XmlNode MyNode = MyDoc.SelectSingleNode("xml/soap:Envelope/soap:Body/RetrieveFacsimileResponse/RetrieveFacsimileResult");
    

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

    如何读取RetrieveFacsimileResult中的数据??

    1 回复  |  直到 1 年前
        1
  •  0
  •   Yitzhak Khabinsky    1 年前

    请尝试以下使用LINQ to XML API的解决方案。它在中提供。Net框架。

    不需要使用长XPath表达式,我们将直接转到感兴趣的XML元素。

    显然,需要考虑默认的命名空间。

    c

    void Main()
    {
        XDocument xdoc = XDocument.Parse(@"<soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope'
                       xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
                       xmlns:xsd='http://www.w3.org/2001/XMLSchema'
                       xmlns:wsa='http://schemas.xmlsoap.org/ws/2004/08/addressing'
                       xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'
                       xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'>
            <env:Header xmlns:env='http://www.w3.org/2003/05/soap-envelope'>
                <wsa:Action>http://cdr.ffiec.gov/public/services/RetrieveFacsimileResponse</wsa:Action>
                <wsa:MessageID>urn:uuid:f1c95072-c1ab-44f4-9c8f-59a26e28fce8</wsa:MessageID>
                <wsa:RelatesTo>urn:uuid:0f4a548e-39ad-4b5f-be02-ad9eaae75e32</wsa:RelatesTo>
                <wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
                <wsse:Security>
                    <wsu:Timestamp wsu:Id='Timestamp-ee96d970-c821-455d-9f92-75085fcad001'>
                        <wsu:Created>2024-06-10T20:27:43Z</wsu:Created>
                        <wsu:Expires>2024-06-10T20:32:43Z</wsu:Expires>
                    </wsu:Timestamp>
                </wsse:Security>
            </env:Header>
            <soap:Body>
                <RetrieveFacsimileResponse xmlns='http://cdr.ffiec.gov/public/services'>
                    <RetrieveFacsimileResult>TestData==</RetrieveFacsimileResult>
                </RetrieveFacsimileResponse>
            </soap:Body>
        </soap:Envelope>");
    
        XNamespace ns = "http://cdr.ffiec.gov/public/services";
    
        var RetrieveFacsimileResult = xdoc.Descendants(ns + "RetrieveFacsimileResult")?
            .SingleOrDefault()?.Value;
    }
    

    输出

    TestData==