Нужно выражение xpath для цикла xmldocument - PullRequest
1 голос
/ 19 февраля 2012

пытается разобрать это:

<?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 ... почему?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

Ваш 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
1 голос
/ 19 февраля 2012

Ваш XML содержит пространство имен.Вам придется создать псевдоним пространства имен с помощью NamespaceManager и включить псевдоним в свой XPath.Подробнее см. http://msdn.microsoft.com/en-us/library/d271ytdx.aspx.

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