使用C#解析mulit-name间隔的XML重复块

时间:2014-11-06 18:33:52

标签: c# xml parsing soap

我正在尝试使用C#解析对SOAP请求的响应中的一些数据。响应具有Soap Envelope,而Soap Body包含来自系统的响应。响应包括一个标题,然后包含来自原始请求的一堆重复的XML信息块。请求是获取任务列表的状态,响应列出每个任务,状态和一些其他信息。这是一个模拟的样本。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
  <GetTaskStatusResponse xmlns="http://tasktracker.com/2011">
     <ResponseHead>
        <ResponseId>345234523452346</ResponseId>            
        <Timestamp>2014-11-05T09:23:51-06:00</Timestamp>
     </ResponseHead>         
        <TaskStatusList>
           <TaskStatus>
              <TaskId>20141155448</AckId>
              <FilingId>672</FilingId>
              <Status>COMPLETE</Status>
        </TaskStatus>
         <TaskStatus>
              <TaskId>20141135448</AckId>
              <FilingId>673</FilingId>
               <Status>COMPLETE</Status>
        </TaskStatus>
        <TaskStatus>
              <TaskId>20141154878</AckId>
              <FilingId>674</FilingId>
               <Status>ERROR</Status>
                <ErrorList>
                    <Error>34-5</Error>
                    <Error>34-6</Error>
                    <Error>77-8</Error>
                </ErrorList>
            </TaskStatus>
        <TaskStatus>
              <TaskId>20154448</AckId>
              <FilingId>675</FilingId>
               <Status>COMPLETE</Status>
        </TaskStatus>
     </TaskStatusList>

.... ....

到目前为止,我已经能够加载文件并将soapevn的第一个命名空间添加到命名空间管理器

nm.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");

当我尝试选择单个节点时,这可以:

XmlNode node = xml.SelectSingleNode("/soapenv:Envelope/soapenv:Body", nm);

但是当我尝试深入探测时,我找不到任何节点。

  XmlNode node = xml.SelectSingleNode(
        "/soapenv:Envelope/soapenv:Body/GetTaskStatusResponse/", nm);
            if (node == null)
            {
                Console.WriteLine("No node found.");
            }
            else
            {
                Console.WriteLine("Found Node");
                Console.WriteLine(node.Value);
                Console.WriteLine(node.InnerText);

我假设这是因为这个元素:

<GetSubmissionStatusResponse xmlns="http://tasktracker.com/2011">

我尝试将带有“”或empty.String的条目与关联的Uri(http://tasktracker.com/2011)一起添加到命名空间管理器对象,我没有解决我的问题。我的最终目标是解析重复任务列表并将这些细节转储到表中。所以一旦我通过这个障碍,我相信我需要弄清楚如何循环重复节点的块。

0 个答案:

没有答案