2011-09-29 106 views
0

我有一個供應商提供給我的XML,無論我嘗試什麼,我都無法在VB.net中解析它。我是XML的新手,請理解這一點。在vb.net中解析XML

這是供應商發過來的XML:

<?xml version='1.0'?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 

<xsd:element name="event"> 
<xsd:complexType> 
    <xsd:sequence> 
    <xsd:element name="id" type="xsd:integer"></xsd:element> 
    <xsd:element name="old_id" type="xsd:integer"></xsd:element> 
    <xsd:element name="opponent" type="xsd:string">Austin MS</xsd:element> 
    <xsd:element name="game_date" type="xsd:string">2011-08-31</xsd:element> 
    <xsd:element name="start_time" type="xsd:string">5:00PM</xsd:element> 
    <xsd:element name="end_time" type="xsd:string">8:00PM</xsd:element> 
    <xsd:element name="sport" type="xsd:string">Baseball</xsd:element> 
    <xsd:element name="level" type="xsd:string">7th</xsd:element> 
    <xsd:element name="gender" type="xsd:string">Boys</xsd:element> 
    <xsd:element name="year" type="xsd:string">2011</xsd:element> 
    <xsd:element name="season" type="xsd:string">Fall</xsd:element> 
    <xsd:element name="status" type="xsd:string">Deleted</xsd:element> 
    <xsd:element name="homeaway" type="xsd:string">Home</xsd:element> 
    <xsd:element name="facility">France</xsd:element> 
    <xsd:element name="facility_id" type="xsd:integer"></xsd:element> 
    <xsd:element name="opponent"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element name="ss_id" type="xsd:integer">19505</xsd:element> 
     <xsd:element name="name" type="xsd:string">Austin MS</xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="location"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element name="ss_id" type="xsd:integer">108</xsd:element> 
     <xsd:element name="name" type="xsd:string">Breck School</xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="score"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element name="result" type="xsd:string"></xsd:element> 
     <xsd:element name="ours" type="xsd:string"></xsd:element> 
     <xsd:element name="theirs" type="xsd:string"></xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="league" type="xsd:string"></xsd:element> 
    <xsd:element name="type" type="xsd:string">Championship</xsd:element> 
    <xsd:element name="ss_id" type="xsd:string">305</xsd:element> 
    <xsd:element name="transportation" type="xsd:string"></xsd:element> 
    <xsd:element name="dismissal" type="xsd:string"></xsd:element> 
    <xsd:element name="return" type="xsd:string"></xsd:element> 
    <xsd:element name="comment"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element name="school" type="xsd:string"></xsd:element> 
     <xsd:element name="conference" type="xsd:string"></xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="home_team" type="xsd:string">Breck - St Paul - Apple Valley</xsd:element> 
    <xsd:element name="activity_type" type="xsd:string">conference</xsd:element> 
    <xsd:element name="category" type="xsd:string"></xsd:element> 
    <xsd:element name="sub_category" type="xsd:string"></xsd:element> 
    <xsd:element name="state" type="xsd:string">MN</xsd:element> 
    </xsd:sequence> 
</xsd:complexType> 
</xsd:element> 

</xsd:schema> 

我曾嘗試使用XSD.EXE創建一個vb.net類,它的錯誤。我已經聯繫了提供XML的供應商,但他們沒有太多幫助。我希望能夠將這個XML抽取到一個函數中,並使用XML中的屬性和列表彈出一個(SportEvents)列表。

我會很樂意爲我指出正確的方向。 由於

+0

您發佈的XML是一個模式文件 - 它描述了一種XML格式。你使用XSD.exe得到了什麼錯誤? – Oded

回答

0

,我已經採用的方法是實現功能的System.Xml http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.aspx

Dim configDoc As XmlDocument = New XmlDocument() 
Dim nodes As XmlNodeList = Nothing 
Dim stringHolder as String = "" 

裝入原稿像這樣

configDoc.Load("filepath") 'load the file 

然後拉中的值無論是單個節點或節點列表

stringHolder = configDoc.SelectSingleNode("/xpath").attributes.getNamedItem("attributeName").Value.toString() 

或內部節點的列表。

nodes = configDoc.SelectNodes("/xpath") 
for each n as XmlNode in nodes 
    stringHolder = n.attributes.getNamedItem("attributeName").Value.toString() 
'do stuff with string 
next 

現在這些方法只處理xml節點的屬性。如果你需要內部文本,那麼你可以研究.innertext()它的非常簡單。希望這有助於你至少指出正確的方向。

+0

你必須導入system.xml –