当节点包含名称空间时,将 Xpath 用于 select 单个节点

Using Xpath to select single node, when node contains namespace

我的一个 SOAP 请求得到以下响应。

<?xml version="1.0" encoding="utf-8" ?> 
<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">
    <soap:Body>
        <UploadIsoResponse xmlns="http://localhost:8000/gw/">
        <UploadIsoResult>false</UploadIsoResult> 
        <status>ISO File does not exist</status> 
        <md5>string</md5> 
        <days>9/18/2015 12:00:00 AM</days> 
        </UploadIsoResponse>
    </soap:Body>
</soap:Envelope>

我正在使用以下代码来解析它。但是,我收到错误消息 未将对象引用设置为对象的实例。这实际上是因为从 xpath 返回的结果为空值。请帮我解析单个节点。

public void fill_response_data(string xml_buffer)
{
    string TARGET_NAME_SPACE = "http://localhost:8000/gw/";
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(xml_buffer);
    XmlNamespaceManager ns = new XmlNamespaceManager(xmlDoc.NameTable);
    ns.AddNamespace("msbld", TARGET_NAME_SPACE);
    XmlNode md5_node = xmlDoc.SelectSingleNode("//msbld:UploadIsoResponse/md5", ns);
    XmlNode md5_status_node = xmlDoc.SelectSingleNode("//msbld:UploadIsoResponse/status", ns);
    txt_md5_checksum.Text = md5_node.InnerText;
    txt_status.Text = md5_status_node.InnerText; 
}

Exception : System.Xml.XmlDocumentAn 'System.NullReferenceException' 类型的未处理异常发生在 IsoGateway.exe

通过在 xpath 中添加名称 space 解决了这个问题,下面是更新的代码段。

  XmlNode md5_node = xmlDoc.SelectSingleNode("//msbld:UploadIsoResponse/msbld:md5", ns);
     XmlNode md5_status_node = xmlDoc.SelectSingleNode("//msbld:UploadIsoResponse/msbld:status", ns);