2012-02-19 2 views
1

пытается разобрать этот:нужно выражение XPath к петле через XmlDocument

<?xml version="1.0" encoding="UTF-8"?> 
<directoryresponse xmlns="https://www.sisow.nl/Sisow/REST" version="1.0.0"> 
    <directory> 
     <issuer> 
      <issuerid>01</issuerid> 
      <issuername>ABN Amro Bank</issuername> 
     </issuer> 
     <issuer> 
      <issuerid>02</issuerid> 
      <issuername>ASN Bank</issuername> 
     </issuer> 
     <issuer> 
      <issuerid>04</issuerid> 
      <issuername>Friesland Bank</issuername> 
     </issuer> 
     <issuer> 
      <issuerid>05</issuerid> 
      <issuername>ING</issuername> 
     </issuer> 
     <issuer> 
      <issuerid>06</issuerid> 
      <issuername>Rabobank</issuername> 
     </issuer> 
     <issuer> 
      <issuerid>07</issuerid> 
      <issuername>SNS Bank</issuername> 
     </issuer> 
     <issuer> 
      <issuerid>08</issuerid> 
      <issuername>RegioBank</issuername> 
     </issuer> 
     <issuer> 
      <issuerid>09</issuerid> 
      <issuername>Triodos Bank</issuername> 
     </issuer> 
     <issuer> 
      <issuerid>10</issuerid> 
      <issuername>Van Lanschot Bankiers</issuername> 
     </issuer> 
    </directory> 
</directoryresponse> 

Вот мой код:

XPath = "//directoryresponse/directory/issuer/issuerid" 
Dim nodeList As XmlNodeList = XML.SelectNodes(XPath) 

но nodelist.count = 0 ... почему?

+0

Спасибо, что нашли время для форматирования XML, чтобы мы могли прочитать Это. –

ответ

2

Ваш XML имеет пространство имен по умолчанию, так что вы код должен быть:
C#:

var doc = new XmlDocument(); 
doc.Load("a.xml"); 

XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable); 
mgr.AddNamespace("ns", "https://www.sisow.nl/Sisow/REST"); 

var result = doc.SelectNodes("//ns:issuer/ns:issuerid", mgr); 

foreach (XmlElement item in result) 
{ 
    Console.WriteLine(item.InnerText); 
} 

VB.NET:

Dim doc As New XmlDocument 
doc.Load("a.xml") 

Dim mgr As New XmlNamespaceManager(doc.NameTable) 
mgr.AddNamespace("ns", "https://www.sisow.nl/Sisow/REST") 

Dim result As XmlNodeList = doc.SelectNodes("//ns:issuer/ns:issuerid", mgr) 

Dim item As XmlElement 
For Each item In result 
    Console.WriteLine(item.InnerText) 
Next 
+0

Хорошо, спасибо! И как я могу выбрать все эмитенты, а затем для всех эмитентов получить значения базового узла? Я пробовал различные вещи: Dim результат Как XmlNodeList = XML.SelectNodes ("// нс: эмитент", Дисп) Dim пункта Как XmlElement Для каждого элемента в результате Console.WriteLine (item.SelectSingleNode ("/ нс: issuerid», прил) .InnerText) Console.WriteLine (item.SelectSingleNode ("/ issuerid") InnerText) Console.WriteLine (item.SelectSingleNode (. "issuerid") InnerText) Следующая – Flo

+0

@Floran, Использование:. ' item.SelectSingleNode ("ns: issuerid", mgr) .InnerText', то есть XPath должен быть 'ns: issuerid' вместо'/ns: issuerid' или '/ issuerid'. Подумайте о повышении или принятии полезного ответа. –

+0

Спасибо! И да, я всегда это делаю после того, как проблема исправлена, и это сейчас! – Flo

-1

Вы могли бы упростить XPath для:

XPath = "//issuerid"; 
+0

У меня теперь есть это, но nodeList.Count по-прежнему 0: Dim url As String = "http://www.sisow.nl/Sisow/iDeal/RestHandler.ashx/DirectoryRequest" Dim req As HttpWebRequest = HttpWebRequest.Create (url.ToString) Dim Респ Как HttpWebResponse = req.GetResponse() читателя Dim As StreamReader = New StreamReader (Resp.GetResponseStream) Dim responseString As String = reader.ReadToEnd() Dim XML как новый XmlDocument XML.LoadXml (responseString) Dim XPath As String = "// issuerid" Dim nodeList Как XmlNodeList = XML.SelectNodes (XPath) – Flo

Смежные вопросы