您的位置:首页 > 其它

csdn网友问:读取复杂格式的XML文件。

2009-08-19 17:20 489 查看
主要是今天又有网友问类似的xml文件读取问题。写到这里容易查找。

找不到下面问题的源代码和xml文件和读取后的界面。重新写一个。源代码也上传到:

http://download.csdn.net/source/1588898

找以前网友问题地址:
http://topic.csdn.net/u/20090410/14/13b574d1-9338-4796-9aec-8d28a5245dc4.html
XML文件:

<?xml version="1.0" encoding="utf-8"?>
<DAILY_TRANSACTIONS>
<SHOP SHOPCODE="S0001" CUSTOMERNO="test001" DATE="2009-03-05">
<TRANSACTION ID="686">
<ITEM>
<PRICE>278</PRICE>
<UPC></UPC>
<PRODUCT_ID>319503</PRODUCT_ID>
<QUANTITY>1</QUANTITY>
</ITEM>
</TRANSACTION>
<TRANSACTION ID="688">
<ITEM>
<PRICE>48</PRICE>
<UPC></UPC>
<PRODUCT_ID>SX3707</PRODUCT_ID>
<QUANTITY>1</QUANTITY>
</ITEM>
</TRANSACTION>
<TRANSACTION ID="689">
<ITEM>
<PRICE>48</PRICE>
<UPC></UPC>
<PRODUCT_ID>SX3708</PRODUCT_ID>
<QUANTITY>1</QUANTITY>
</ITEM>
</TRANSACTION>
</SHOP>
</DAILY_TRANSACTIONS>


问题:要取出的字段:SHOPCODE/CUSTOMERNO/DATE/ID/PRICE/UPC/PRODUCT_ID/QUANTITY

我的回答:
这个可以读出 SHOPCODE/CUSTOMERNO/DATE xml文件的SHOP的属性。
这是一种简单的方法。接下来你要读出的东西的某一个TRANSACTION ID的里面的那些元素的值,还是循环读出是有ITEM

 

Dim xReader As XmlReader
Dim shopCode As String = ""
Dim cNum As String = ""
Dim dDate As String = ""
xReader = XmlReader.Create("D:/xml.xml")
xReader.ReadToFollowing("SHOP")
If xReader.HasAttributes Then
shopCode = xReader.GetAttribute("SHOPCODE")
cNum = xReader.GetAttribute("CUSTOMERNO")
dDate = xReader.GetAttribute("DATE")
End If
Me.TextBox1.Text += shopCode & System.Environment.NewLine
Me.TextBox1.Text += cNum & System.Environment.NewLine
Me.TextBox1.Text += dDate & System.Environment.NewLine


还有第二种比较好的容易控制的方法。

这是第二种方法:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
Dim IXmlDoc As New XmlDocument()
Dim IRoot As XmlNode
Dim INodeList As XmlNodeList
Dim INode, itemX As XmlNode
'加载文件
IXmlDoc.Load("D:/xml.xml")
'选择SHOP
IRoot = IXmlDoc.SelectSingleNode("//SHOP")
'读出各个属性值。
Me.TextBox1.Text += "SHOP各个属性的值" & Environment.NewLine
Me.TextBox1.Text += "SHOPCODE:" & IRoot.Attributes("SHOPCODE").Value & Environment.NewLine
Me.TextBox1.Text += "CUSTOMERNO:" & IRoot.Attributes("CUSTOMERNO").Value & Environment.NewLine
Me.TextBox1.Text += "DATE:" & IRoot.Attributes("DATE").Value & Environment.NewLine
Me.TextBox1.Text += "===================" & Environment.NewLine
'--------------------
'这里读的是所有<TRANSACTION>的列表
INodeList = IRoot.ChildNodes
For i = 0 To INodeList.Count - 1
'这里读的是某一个<TRANSACTION>
INode = INodeList.Item(i)
'这里读的是<ID>属性
Me.TextBox1.Text += "<TRANSACTION> ID:" & INode.Attributes("ID").Value & System.Environment.NewLine
'这里读的是一个<ITEM>
itemX = INode.FirstChild
'---------------------------
'加载各个元素的值,if then 的作用是来判断那个元素为空元素。如你的<UPC>的空的。
If itemX.Item("PRICE").FirstChild IsNot Nothing Then
Me.TextBox1.Text += "PRICE:" & itemX.Item("PRICE").FirstChild.Value & Environment.NewLine
Else
Me.TextBox1.Text += "PRICE:" & Environment.NewLine
End If
If itemX.Item("UPC").FirstChild IsNot Nothing Then
Me.TextBox1.Text += "UPC: " & itemX.Item("UPC").FirstChild.Value & Environment.NewLine
Else
Me.TextBox1.Text += "UPC: " & Environment.NewLine
End If
If itemX.Item("PRODUCT_ID").FirstChild IsNot Nothing Then
Me.TextBox1.Text += "PRODUCT_ID:" & itemX.Item("PRODUCT_ID").FirstChild.Value & Environment.NewLine
Else
Me.TextBox1.Text += "PRODUCT_ID:" & Environment.NewLine
End If
If itemX.Item("QUANTITY").FirstChild IsNot Nothing Then
Me.TextBox1.Text += "QUANTITY:" & itemX.Item("QUANTITY").FirstChild.Value & Environment.NewLine
Else
Me.TextBox1.Text += "QUANTITY:" & Environment.NewLine
End If
Me.TextBox1.Text += "-----------------" & Environment.NewLine
Next

End Sub


 

上面的代码读取xml后结果如界面: 
http://album.hi.csdn.net/app_uploads/linjimu/20090819/171502826.jpg

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息