【问题标题】:Parsing XML in vb.net在 vb.net 中解析 XML
【发布时间】:2011-09-29 18:57:47
【问题描述】:

我有一些供应商提供给我的 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 泵入一个函数并让它弹出一个列表(SportEvents),其中包含 XML 中的属性和列表。

如果能帮助我指出正确的方向,我将不胜感激。 谢谢

【问题讨论】:

  • 您发布的 XML 是一个模式文件 - 它描述一种 XML 格式。您在使用 XSD.exe 时遇到了哪些错误?

标签: xml vb.net


【解决方案1】:

我使用的方法是实现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() 它非常简单。希望这至少可以帮助您指出正确的方向。

【讨论】:

  • 你必须导入 system.xml
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多