2012-05-25 4 views
-1

이것은 특성이없는 요소의 세부 정보를 검색하는 vb.net의 샘플 코드입니다.xmlDocument, xmlNode 및 xmlNodelist를 사용하여 xml에서 데이터 가져 오기

For Each standardItemInfoNode In ItemInfoNodes 
     baseDataNodes = ItemInfoNodes.ChildNodes 
     bFirstInRow = True 
     For Each baseDataNode As XmlNode In baseDataNodes 
      If (bFirstInRow) Then 
       bFirstInRow = False 
      Else 
       Response.Write("<br>") 
      End If 
      Response.Write(baseDataNode.Name & ": " & baseDataNode.InnerText) 
     Next 
    Next 

속성이있는 노드와 속성을 갖는 노드가있는 것처럼 xml의 세부 정보를 검색하는 방법은 무엇입니까? 다른 XML 태그의 중간에있는 노드와 하위 노드의 모든 속성을 검색해야합니다.

+0

당신이 말하는 것에 대한 예시적인 XML 문서를 제공 할 수 있습니까? 그런데 XML 문서를 단순히 형식이 다른 출력 HTML이나 XML 문서로 변환하는 경우 XSLT 스크립트와 XslCompiledTransform 클래스를 사용하여 문서를 변환하는 것이 좋습니다. –

답변

0

정확히 무엇을 요구하는지 모르겠지만 처리하려는 XML의 형식을 모른 채 구체적인 예를 제공 할 수는 없지만 찾고자하는 것이 특성입니다 XmlNode 개체의 속성 각 XmlNode에는 해당 노드의 모든 특성에 액세스 할 수있는 Attributes 속성이 있습니다.

http://msdn.microsoft.com/en-us/library/7f285y48.aspx

편집 : 여기에 (간단한 예제 및 제공)을 설명하는 MSDN 페이지의

당신이 코멘트에 게시 예제 XML을 사용하여, 당신은 모든 값을 읽어와 같은 속성 수 이 :이 같은 XML의 모든 데이터를로드하는 경우

Dim doc As XmlDocument = New XmlDocument() 
    doc.LoadXml("<EventTracker><StandardItem><Header1>Header1 Text</Header1> <Header2>Header2 Text</Header2></StandardItem><Item> <Events> <EventSub EventId='73' EventName='Orchestra' Description='0'> <Person PersonId='189323156' PersonName='Chandra' Address='Arunachal'/><Person PersonId='189323172' PersonName='Sekhar' Address='Himachal'/></EventSub> </Events> </Item> </EventTracker>") 
    Dim header1 As String = doc.SelectSingleNode("EventTracker/StandardItem/Header1").InnerText 
    Dim header2 As String = doc.SelectSingleNode("EventTracker/StandardItem/Header2").InnerText 
    For Each eventSubNode As XmlNode In doc.SelectNodes("EventTracker/Item/Events/EventSub") 
     Dim eventId As String = eventSubNode.Attributes("EventId").InnerText 
     Dim eventName As String = eventSubNode.Attributes("EventName").InnerText 
     Dim eventDescription As String = eventSubNode.Attributes("Description").InnerText 
     For Each personNode As XmlNode In eventSubNode.SelectNodes("Person") 
      Dim personId As String = personNode.Attributes("PersonId").InnerText 
      Dim personName As String = personNode.Attributes("PersonName").InnerText 
      Dim personAddress As String = personNode.Attributes("Address").InnerText 
     Next 
    Next 

그러나, 나는 EventTracker 객체로 XML을 역 직렬화 추천 할 것입니다. 또는, 귀하의 게시물에 대한 내 의견에서 말했듯이, XML 문서를 읽는 유일한 목적이 다른 XML 또는 HTML 문서로 변환하는 것이면, 대신 XSLT를 사용하는 것이 좋습니다. 이 속성이 존재하는지 테스트하려면

, 당신은 같은 것을 할 수 있습니다 그러나

Dim attribute As XmlNode = personNode.Attributes.GetNamedItem("PersonId") 
If attribute IsNot Nothing Then 
    Dim personId As String = attribute.InnerText 
End If 

,이 직렬화 복원 된 객체 때문에 직렬화 훨씬 쉬울 것이다 단순히 어떤 요소에 대한 널 (null) 속성을 가지고 것이라고 존재하지 않았다.

+0

<이용시 PersonId ='189323156 '=으로 PersonName'찬드라 '주소 ='아루나 찰 '> <이용시 PersonId = '189323172'으로 PersonName = 'Sekhar'주소 = '히 마찰'> <사람 PersonId ='89323156 '으로 PersonName ='램 '주소 ='인도 '> 617,451,515,

+0

HEADER1 텍스트 HEADER2 텍스트<이용시 PersonId = '189323156'PersonName = 'Chandra'Address = 'Arunachal'/> Header1 및 Header2가 맨 위에 추가되면 코드가 어떻게 될 수 있습니다. 다시 물어서 미안해. –

+0

@ user1407900 왜 두 번째 XML 문서를 게시 했습니까? 내 코드가 아직 그 코드를 처리하는 것처럼 보입니다. –

0

SelectSingleNode("XPath or NodeName")을 사용하고 해당 노드의 Attributes.Item(index)을 반복 할 수 있습니다. 미리 자식 노드 이름을 알고 있다면 SelectSingleNode("XPath Or NodeName").SelectSingleNode("XPath or ChildName").Attributes.Item(index)을 반복 할 수 있습니다.

관련 문제