2016-06-22 8 views
0

XML에서 2 개의 값을 가져 오려고합니다.xml에서 상위 및 하위 노드 읽기

현재 아래 코드를 실행하면 "OutTime"에 정보 만 표시됩니다. 왜 이런 일이 일어나는 지 알지만, 내가 원하는 정보를 얻기 위해 어떻게 변경해야하는지 확신 할 수 없습니다.

내가 표시하고자하는 것은 : 'People'및 'OutTime'에있는 모든 이름입니다.

예 :

출력 : S7-JEHILL 20시 47분

XML 시트

<Times> 
    <People> 
    <S7-JEHILL> 
     <OutTime>20:47</OutTime> 
    </S7-JEHILL> 
    </People> 
</Times> 

현재 코드

,536,
Dim xmlDoc As New XmlDocument() 
     xmlDoc.Load("C:\Users\jefhill\Desktop\TimeStamps.xml") 
     Dim child As XmlNode = xmlDoc.SelectSingleNode("/Times/People") 
     If Not (child Is Nothing) Then 
      Dim nr As New XmlNodeReader(child) 
      While nr.Read() 
       NameList.Items.Add(nr.Value) 
      End While 
     End If 

답변

0

먼저 XPath 쿼리를 사용하여 태그 아래의 모든 노드를 가져옵니다.

Sub Main() 

    Dim Xml As String = "<Times><People><S7-JEHILL><OutTime>20:47</OutTime></S7-JEHILL></People></Times>" 
    Dim Doc As New Xml.XmlDocument 
    Dim Xpath As String = "/Times/People" 
    Dim ElementList As Xml.XmlNodeList = doc.SelectNodes(xpath) 
    Dim PersonName, OutTime As String 

    'load xml to document 
    Doc.LoadXml(Xml) 

    'iterate elements in <People> 
    For Each Element As Xml.XmlElement In ElementList 
     'gets the S7-JEHILL value from the tag name 
     PersonName = Element.ChildNodes(0).Name 
     'gets the 20:47 from the tag value i.e. inner XML 
     OutTime = Element.ChildNodes(0).ChildNodes(0).InnerXml 
     Console.WriteLine(String.Format("{0} {1}", PersonName, OutTime)) 
    Next 

    Console.ReadKey() 

End Sub 
0

이 참조에 System.XML 추가 : 그런 다음) 태그 이름의 관련 정보를 얻고 b)는 OUTTIME 값으로 ChildNodes 컬렉션을 사용합니다. 이는 XML 파일 노드 조작에 대한 또 다른 접근 방법입니다.

Dim xmlDoc As New XmlDocument 'For loading xml file to read 
    Dim ArticleNodeList As XmlNodeList 'For getting the list of main/parent nodes 

    xmlDoc.Load("C:\Users\jefhill\Desktop\TimeStamps.xml") 'loading the xml file, insert your file here 
    ArticleNodeList = xmlDoc.GetElementsByTagName("People") 'Setting all <People> node to list 
    For Each articlenode As XmlNode In ArticleNodeList 'Looping through <People> node 
     For Each basenode As XmlNode In articlenode 'Looping all <People> childnodes 
      Dim result As String = "" 
      result = basenode.Name 'use .name to get the xml node name 
      For Each Node As XmlNode In basenode 'Looping all childnodes of basenode 
       result = result & " " & Node.InnerText 'use .Innertext to get the xml node value 
      Next 
      NameList.Items.Add(result) 'Adding Value to your variable 
     Next 
    Next