xpath в vb.net как перебирать в итерации - PullRequest
0 голосов
/ 04 марта 2012

это, вероятно, глупый вопрос, и решение - это то, что я упустил, но предположим, что следующий XML-файл (ниже)

Я перебираю элементы info / test, а затем хочу повторить итерацию по test_properties, но я не знаю, как.

свойства никогда не являются фиксированным числом, поэтому он может иметь 1 свойство или 200 мне нужен атрибут type = '"и значение свойства Я использую это до сих пор:

    Dim Xml_Document As XPathDocument = New XPathDocument("e:\test.xml")
            Dim Navigator As XPathNavigator = Xml_Document.CreateNavigator()
            Dim ns As XmlNamespaceManager = New XmlNamespaceManager(Navigator.NameTable)
            Dim NodeIterator As XPathNodeIterator = Navigator.Select("/info/test")


            Try
                While NodeIterator.MoveNext()
                    Dim sanction_id As Integer = CInt(NodeIterator.Current.GetAttribute("id", ns.DefaultNamespace))
                    Dim clone As XPathNavigator = NodeIterator.Current.Clone()

                    clone.MoveToFirstChild()
                    MsgBox(clone.Value)
                    clone.MoveToNext()
                    MsgBox(clone.Value)
                    clone.MoveToNext()
                    MsgBox(clone.Value)
                    clone.MoveToNext()
                    MsgBox(clone.Value)
                    clone.MoveToNext()
                    MsgBox(clone.Value)
                    clone.MoveToNext()
                    MsgBox(clone.Value)
                    clone.MoveToNext()
''''''''
' here i want to iterate through test_properties for each property 
'''''''

                End While
            Catch ex As Exception
                Console.WriteLine(ex.StackTrace)
            End Try

и xml

<?xml version="1.0" encoding="UTF-8"?>
<info>
    <test id="1">
        <test_source>ONLINE</test_source>
        <test_type><![CDATA[P]]></test_type>
        <test_date><![CDATA[2012-02-23]]></test_date>
        <test_programme><![CDATA[UK]]></test_programme>
        <test_remark><![CDATA[Nice guy]]></test_remark>
        <test_key>123456789</test_key>
        <test_properties>
            <property type="FIRSTNAME"><![CDATA[Robert]]></property>
            <property type="MIDDLENAME"><![CDATA[]]></property>
            <property type="LASTNAME"><![CDATA[Johnson]]></property>
            <property type="GENDER"><![CDATA[M]]></property>
            <property type="BIRTHDATE"><![CDATA[1900-01-01]]></property>
        </test_properties>
    </test>
    <test id="2">
        <test_source>ONLINE</test_source>
        <test_type><![CDATA[P]]></test_type>
        <test_date><![CDATA[2012-02-23]]></test_date>
        <test_programme><![CDATA[UK]]></test_programme>
        <test_remark><![CDATA[Nice girl]]></test_remark>
        <test_key>123456789</test_key>
        <test_properties>
            <property type="FIRSTNAME"><![CDATA[Roberta]]></property>
            <property type="MIDDLENAME"><![CDATA[]]></property>
            <property type="LASTNAME"><![CDATA[Johnsons]]></property>
            <property type="GENDER"><![CDATA[M]]></property>
            <property type="BIRTHDATE"><![CDATA[1900-01-01]]></property>
        </test_properties>
    </test>
</info>

1 Ответ

0 голосов
/ 04 марта 2012
For Each test As XPathNavigator In Xml_Document.CreateNavigator().Select("/info/test")
  For Each prop As XPathNavigator In test.Select("test_properties/property")
    Console.WriteLine("{0}: {1}", prop.GetAttribute("type", null), prop.Value);
  Next
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...