xml读取

xiaoniaodewen 2010-08-19 04:43:14
现有XML文件 shop.xml

<?xml version="1.0" encoding="utf-8"?>
<shop><province provinceName="安徽省">
<city cityName="合肥市">
<area areaName="庐阳区">
<LNshop shopName="A" address="A地址"/>
<LNshop shopName="B" address="B地址"/>
<LNshop shopName="C" address="C地址"/>
</area>
</city>
<city cityName="淮北市">
<area areaName="相山区">
<LNshop shopName="D" address="D地址"/>
</area>
</city>
</province>
</shop>

请问如何得到如下的列表?谢谢。
安徽省 合肥市 庐阳区 A A地址
安徽省 合肥市 庐阳区 B B地址
安徽省 合肥市 庐阳区 C C地址
安徽省 淮北市 相山区 D D地址
...全文
212 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2010-08-20
  • 打赏
  • 举报
回复
上面是LinqToXml的代码,

再贴个XPath的代码

Sub GetListByXPath()
Dim xmlDoc As XmlDocument = New XmlDocument()
xmlDoc.Load("D:\VisualStudioProject2008\Test\LinqToXml\data.xml")

Dim List2 As List(Of Hashtable) = New List(Of Hashtable)
Dim nodes As XmlNodeList = xmlDoc.SelectNodes("//LNshop")
For Each node As XmlNode In nodes
Dim rec As Hashtable = New Hashtable
rec.Add("provinceName", node.SelectSingleNode("ancestor::province").Attributes("provinceName").Value)
rec.Add("cityName", node.SelectSingleNode("ancestor::city").Attributes("cityName").Value)
rec.Add("areaName", node.SelectSingleNode("ancestor::area").Attributes("areaName").Value)
rec.Add("shopName", node.Attributes("shopName").Value)
rec.Add("address", node.Attributes("address").Value)
List2.Add(rec)
Next

For Each s As Hashtable In List2
Console.WriteLine("{0}, {1}, {2}, {3}, {4}", s("provinceName"), s("cityName"), s("areaName"), s("shopName"), s("address"))
Next

Console.Read()
End Sub
机器人 2010-08-20
  • 打赏
  • 举报
回复
    Sub Main()
Dim xmlDoc As XDocument = XDocument.Load("D:\VisualStudioProject2008\Test\LinqToXml\data.xml")
Dim List1 = (From el In xmlDoc.<shop>.<province>.<city>.<area>.Elements _
Select el.Ancestors("province").@provinceName, _
el.Ancestors("city").@cityName, _
el.Ancestors("area").@areaName, _
el.@shopName, _
el.@address).ToList()
For Each s In List1
Console.WriteLine("{0}, {1}, {2}, {3}, {4}", s.provinceName, s.cityName, s.areaName, s.shopName, s.address)
Next

Console.Read()
End Sub
阿双2009 2010-08-19
  • 打赏
  • 举报
回复

'创建DataTable用来存取所要的数据
Dim dt As New DataTable()
Dim col As New DataColumn("Province", GetType(String))
dt.Columns.Add(col)
col = New DataColumn("City", GetType(String))
dt.Columns.Add(col)
col = New DataColumn("Area", GetType(String))
dt.Columns.Add(col)
col = New DataColumn("ShopName", GetType(String))
dt.Columns.Add(col)
col = New DataColumn("ShopAddress", GetType(String))
dt.Columns.Add(col)

Dim xmlDoc As New XmlDocument()
xmlDoc.Load("D:\XMLFile1.xml")
Dim nodeList As XmlNodeList = xmlDoc.SelectSingleNode("shop").ChildNodes
'获取根节点的所有子节点
For Each provinceList As XmlNode In nodeList
'遍历所有province节点
For Each cityList As XmlNode In provinceList
'遍历所有city节点
For Each areaList As XmlNode In cityList
'遍历所有area节点
For Each shopList As XmlNode In areaList
'遍历所有LNshop节点
Dim dr As DataRow = dt.NewRow()
dr("Province") = provinceList.Attributes("provinceName").Value
dr("City") = cityList.Attributes("cityName").Value
dr("Area") = areaList.Attributes("areaName").Value
dr("ShopName") = shopList.Attributes("shopName").Value
dr("ShopAddress") = shopList.Attributes("address").Value
dt.Rows.Add(dr)
Next
Next
Next
Next

最后dt中保存的数据即为所求。。

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧