2013-08-06 8 views
0

나는이 XML을 읽을 수 : gb2312name :이 XML을 올바르게 읽으려면 어떻게해야합니까?

<item_proto extended="true" version="1"> 
    <Item vnum="1" name="'y'" gb2312name="Treasure" type="9" subtype="0" weight="0" size="1" antiflag="0" flag="0" wearflag="0" immuneflag="0" gold="0" buy_price="0" limittype0="0" limitvalue0="0" limittype1="0" limitvalue1="0" applytype0="0" applyvalue0="0" applytype1="0" applyvalue1="0" applytype2="0" applyvalue2="0" value0="0" value1="0" value2="0" value3="0" value4="0" value5="0" socket0="0" socket1="0" socket2="0" socket3="0" socket4="0" socket5="0" refine_vnum="11" refine_set="11" magic_pct="0" specular="0" socket_pct="0" /> 
    <Item vnum="2" name="'l'" gb2312name="Key" type="0" subtype="0" weight="0" size="1" antiflag="0" flag="0" wearflag="0" immuneflag="0" gold="0" buy_price="0" limittype0="0" limitvalue0="0" limittype1="0" limitvalue1="0" applytype0="0" applyvalue0="0" applytype1="0" applyvalue1="0" applytype2="0" applyvalue2="0" value0="0" value1="0" value2="0" value3="0" value4="0" value5="0" socket0="0" socket1="0" socket2="0" socket3="0" socket4="0" socket5="0" refine_vnum="11" refine_set="11" magic_pct="0" specular="0" socket_pct="0" /> 
    <Item vnum="19" name="'e9'" gb2312name="Sword" type="1" subtype="0" weight="0" size="2" antiflag="32" flag="1" wearflag="16" immuneflag="0" gold="100" buy_price="750" limittype0="1" limitvalue0="0" limittype1="0" limitvalue1="0" applytype0="7" applyvalue0="22" applytype1="0" applyvalue1="0" applytype2="0" applyvalue2="0" value0="0" value1="15" value2="19" value3="13" value4="15" value5="63" socket0="0" socket1="64992" socket2="127" socket3="64976" socket4="21631" socket5="4855" refine_vnum="0" refine_set="0" magic_pct="15" specular="100" socket_pct="1" /> 
</item_proto> 

가능하다면, 나는 노드의 한을 읽을 수.

가 여기에 내가 시도 내용은 다음과 같습니다

Dim doc As New XmlDocument() 
Dim root As XmlNode = doc.GetElementsByTagName("Item").Item(3) 

'Display the contents of the child nodes. 
If root.HasChildNodes Then 
    Dim i As Integer 

    For i = 0 To root.ChildNodes.Count - 1 
     ListBox1.Items.Add(root.ChildNodes(i).InnerText) 
    Next i 
End If 
+0

가 시작 @MiguelSilva 공식 문서 (http://msdn.microsoft.com/en-us/library/20esef39.aspx) 다시 시도하고 ** 어떻게 ** 작동하지 않았다 말하는. 의미 : 코드 (올바른 형식으로 작성된 귀하의 질문에 편집 됨)와 오류 메시지 (동등한 것)를 보여주십시오. 또한 샘플 입력에서 주어진 예제 출력을 제공하십시오. 작성중인 함수의 결과가 될 데이터 구조와 같습니다. – millimoose

+0

@MiguelSilva 당신은 당신이 1 개의 노드'gb2312name'을 원한다고 언급했습니다. 그 이름을 가진'Attributes'가 3 개 있습니다. 3 가지 속성 값을 모두 가진 컬렉션을 원하십니까? – psubsee2003

+0

이 코드에서는 예외가 있음을 언급했습니다. 어떤 예외입니까? – Ryan

답변

2

이의이 가능한 예외의 원인이 문제부터 시작하자 : (가장) 컬렉션 '인덱스는 0에서 시작,이 하나 포함되어 있습니다. 세 번째 <Item>을 얻으려면 그래서, 그것은 .Item(2)있어 (또는 (2)) :

Dim root As XmlNode = doc.GetElementsByTagName("Item")(2) 

다음, root.ChildNodes을 속성을 포함하지 않습니다, 그것은 않은 경우에도 InnerText 확인 할 수있는 권리 재산되지 않을 것 . 다행히도 Attributes exists 그리고 루프가 필요하지 않습니다. (. 당신이 한 경우,이 방법으로하는 For Each 루프 것입니다) 그래서

ListBox1.Items.Add(root.Attributes("gb2312name")) 

각 요소에서 gb2312name를 추가하고자한다면, 그것은 다음과 같습니다

For Each el In doc.GetElementsByTagName("Item") 
    ListBox1.Items.Add(el.Attributes("gb2312name")) 
Next 
+0

미니 텍 감사합니다, 잘 했어요. –

관련 문제