XmlNodeList.SelectSingleNode () возвращает значение NULL при наличии элементов - PullRequest
1 голос
/ 31 августа 2011

В следующем коде SelectSingleNode возвращает ноль.

XmlDocument xmlresp = GetXMLWebRequest(URL, PayLoad, "");
XmlNodeList elemList = xmlresp.GetElementsByTagName("Document");
for (int i = 0; i < elemList.Count - 1; i++)
{
   byte[] b = System.Convert.FromBase64String(elemList.Item(i).SelectSingleNode("Page/Value").Value);
}

В этом случае значение elemList.Item(i) такое, как показано ниже, я вижу узел страницы / значения в OuterXml.

elemList.Item(i.OuterXml), как показано ниже.

<Document xmlns=\"http://integration.fiapi.com\">
  <ID>1</ID>
  <Date>2006-03-19</Date>
  <Class>Check</Class>
  <Type>GetImage</Type>
  <Page Number=\"1\" Format=\"jpg\" View=\"F\">
    <Value>
      /9j/4AAQSkZJRgABAgIAyQDJAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCALgBogBAREA/8QA0gAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy
WccE3hnSr2Rc5nnkhDvkk8hJlXjpwB09easf8JD8c/+hM0P/v8AL/8AJFH/AAkPxz/6EzQ/+/y//JFZepXvx/vrhZbfTLTT0CBTFataMpOT8x8x3OecdccDjrmn/wAZD/5/s+oLqy/aCvPI81518mVZl8meziyw6BthG5eeVbKnuDV+xuP2grS8jnmsoL2Nc5gnNmEfII5KMrcdeCOnpxVc/D74yazLNqU3ij+ypLqV5TYjVrgCDLH5VCblC+gDHAx3rQtfAvxps9OnsYvHFi0M27c01zJLIMjB2yPCXXgcbSMHkYPNZ/8Awqz4v/8AQ+/+Vi7/APiKP+FWfF//AKH3/wArF3/8RWhd+APi/d6Pp2nf8JbYw/YfN/0mHUrtZrje2796235tvRemBWf/AMKs+L//AEPv/lYu/wD4ij/hVnxf/wCh9/8AKxd//EUf8Ks+L/8A0Pv/AJWLv/4ij/hVnxf/AOh9/wDKxd//ABFH/CrPi/8A9D7/AOVi7/8AiKuab8J/ibLcMuqfEe7toNhKva31zOxbI4KsUAGM857DjnjU/wCFQeMP+is65+U3/wAfo/4VB4w/6Kzrn5Tf/H6P+FQeMP8AorOuflN/8frn/wDhmX/qbv8Aym//AG2j/hmX/qbv/Kb/APbaP+GZf+pu/wDKb/8AbauSfs96lNpcOly+Prt9PhffFaNZsYkbnlU87APzNy
ayST+GXluDE1xkZ2vuhXAIUBoWORkEuTj1sfAPwlC/wAPtXu9RhkaDXXa3aMyDbJboGTI2/MpLPKp5B+UEY6nkPCvia28J/CHx34Z1ARx61FcSwG1knRS5lVYG2YJLlCjM2BjGOecjU8F6PZ/CD4tWuna5q0Df2johLXJxFDBIX3FSzsMr+5IDcEll+UVb8BQTX3wo+I/iu7ikiu9
    </Value>
  </Page>
</Document>

Ответы [ 3 ]

1 голос
/ 31 августа 2011

Дайте этому шанс:

XmlNamespaceManager nsManager;

nsManager = new XmlNamespaceManager(doc.NameTable);

nsManager.AddNamespace("fi", "http://integration.fiapi.com");

elementList.Item(i).SelectSingleNode("fi:Page/fi:Value", nsManager);
1 голос
/ 31 августа 2011

Проблема в том, что оба элемента <Page> и <Value> находятся под пространством имен http://integration.fiapi.com (оно применяется ко всем потомкам <Document>), и вы не указали пространство имен в своем SelectSingleNode запрос.

Вы можете удалить пространство имен или изменить запрос следующим образом:

XmlNamespaceManager mgr = new XmlNamespaceManager(xmlresp.NameTable);
mgr.AddNamespace("ns", "http://integration.fiapi.com");

for (int i = 0; i < elemList.Count; ++i)
{
    XmlNode node = elemList[i].SelectSingleNode("ns:Page/ns:Value", mgr);
    // ... convert node.Value as needed
}
0 голосов
/ 22 ноября 2018

Я прочитал этот Вопрос очень поздно, но дал решение, так что это может помочь любому, кто борется с нулевым значением для selectedNodes или SelectedSingleNode.

XmlDocument xmlresp = GetXMLWebRequest (URL, PayLoad, "");

xmlresp.Load (новый xmlTextReader (новый StringReader ("Document)) {Namespaces = false});

XmlNodeList elemList = xmlresp.SelectSingleNode ("Document");

Пожалуйста, обновите ваш код жирной линией и попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...