<?xml version="1.0" standalone="yes"?>
<WAWA>
<list>
<group>好友</group>
<friend>A001</friend>
</list>
<list>
<group>好友</group>
<friend>A002</friend>
</list>
<list>
<group>陌生人</group>
<friend>B001</friend>
</list>
<list>
<group>陌生人</group>
<friend>B002</friend>
</list>
<list>
<group>黑名单</group>
<friend>C001</friend>
</list>
<list>
<group>黑名单</group>
<friend>C002</friend>
</list>
<list>
<group>朋友</group>
<friend>D001</friend>
</list>
<list>
<group>朋友</group>
<friend>D002</friend>
</list>
</WAWA>这是一个XML文件的内容 我想读取XML上的数据并在treeview控件上面显示下面的效果
由于我水平有限,希望大家帮帮忙。
|————好友
| |——A001
| |——A002
|
|————陌生人
| |——B001
| |——B002
|
|————黑名单
| |——C001
| |——C002
|
|————朋友
| |——D001
| |——D002
|
<WAWA>
<list>
<group>好友</group>
<friend>A001</friend>
</list>
<list>
<group>好友</group>
<friend>A002</friend>
</list>
<list>
<group>陌生人</group>
<friend>B001</friend>
</list>
<list>
<group>陌生人</group>
<friend>B002</friend>
</list>
<list>
<group>黑名单</group>
<friend>C001</friend>
</list>
<list>
<group>黑名单</group>
<friend>C002</friend>
</list>
<list>
<group>朋友</group>
<friend>D001</friend>
</list>
<list>
<group>朋友</group>
<friend>D002</friend>
</list>
</WAWA>这是一个XML文件的内容 我想读取XML上的数据并在treeview控件上面显示下面的效果
由于我水平有限,希望大家帮帮忙。
|————好友
| |——A001
| |——A002
|
|————陌生人
| |——B001
| |——B002
|
|————黑名单
| |——C001
| |——C002
|
|————朋友
| |——D001
| |——D002
|
需要知识
xml解析
dataset.readxml
xmldocument.read
xmlreader树节点添加
treeview1.nodes.add();
:http://download.csdn.net/source/228583#aa
但像我上面给出的XML格式的你的也读不出来
StreamReader str=new StreamReader("~/tree.xml");
XmlDataDocument document=new XmlDataDocument();
document.DataSet.ReadXml(str);
DataTable dt=document.DataSet.Tables[0];
2.使用递归,读取出第一个节点
Private XmlFile As String Public ReadOnly Property XmlFileName() As String
Get
Return XmlFile
End Get
End Property Public ReadOnly Property XmlText() As String
Get
Return XmlDoc.InnerXml
End Get
End Property Sub New(ByVal FileName As String, Optional ByVal CreateNew As Boolean = True, Optional ByVal Root As String = "XML", Optional ByRef IsOK As Boolean = False)
IsOK = False
XmlFile = ""
Dim reader As System.Xml.XmlReader = Nothing
Try
reader = New System.Xml.XmlTextReader(FileName)
reader.Read()
Catch ex As Exception
If reader IsNot Nothing Then reader.Close()
Debug.Print("New - " & ex.Message)
If Not Create(FileName, Root) Then Return
Finally
If reader IsNot Nothing Then reader.Close()
End Try IsOK = True
XmlFile = FileName
XmlDoc = New XmlDocument
XmlDoc.Load(XmlFile)
End Sub Public Function Create(ByVal FileName As String, Optional ByVal Root As String = "XML") As Boolean
Dim NewXML As XmlTextWriter = Nothing
Try
NewXML = New XmlTextWriter(FileName, Nothing)
NewXML.Formatting = Formatting.Indented
NewXML.WriteStartDocument()
NewXML.WriteComment(My.Application.Info.AssemblyName & " Settings")
NewXML.WriteStartElement(Root)
NewXML.WriteAttributeString("Powered", "Null")
NewXML.WriteEndElement()
NewXML.WriteEndDocument()
NewXML.Flush()
NewXML.Close()
Catch ex As Exception
Debug.Print("Create - " & ex.Message)
Return False
Finally
If NewXML IsNot Nothing Then
NewXML.Close()
NewXML = Nothing
End If
End Try
Return True
End Function Public Function Save(ByVal aSection As String, ByVal aKey As String, ByVal aValue As String) As Boolean
Dim Paths() As String
Dim n As Integer
Dim Node, Node2 As XmlNode
Dim Ele As XmlElement While Strings.Left(aSection, 1) = "/"
aSection = Strings.Mid(aSection, 2)
End While '段名是否为空
If aSection = "" Then
XmlDoc.DocumentElement.RemoveAll()
Else
Paths = Strings.Split(aSection, "/")
Try
Node = XmlDoc.DocumentElement.SelectSingleNode(Paths(n))
If Node Is Nothing Then
Ele = XmlDoc.CreateElement(Paths(n))
Node = XmlDoc.DocumentElement.AppendChild(Ele)
End If
For n = 1 To Paths.Length - 1
If Paths(n) = "" Then Continue For
Node2 = Node.SelectSingleNode(Paths(n))
If Node2 Is Nothing Then
Ele = XmlDoc.CreateElement(Paths(n))
Node2 = Node.AppendChild(Ele)
End If
Node = Node2
Next
'键名是否为空
If aKey = "" Then
Node.RemoveAll()
Else
Ele = Node.Item(aKey)
If Ele Is Nothing Then
Ele = XmlDoc.CreateElement(aKey)
Node.AppendChild(Ele)
End If
'值是否为空
If aValue = "" Then
Node.RemoveChild(Ele)
Else
Ele.InnerText = aValue
End If
End If
Catch ex As Exception
Debug.Print(ex.Message)
Return False
End Try
End If
XmlDoc.Save(XmlFile)
Return True
End Function Public Function Read(ByVal aSection As String, ByVal aKey As String, Optional ByVal aDefaultValue As String = "") As String
Dim Node As XmlNode
Node = XmlDoc.DocumentElement.SelectSingleNode(aSection & "/" & aKey)
If Node Is Nothing Then Return aDefaultValue
Return Node.InnerText
End FunctionEnd Class
也帮我好拉
我太菜拉。
ds.ReadXml(strXml);
foreach(DataRow r in ds.Tables[0].Rows)
{
tree.Nodes.Add(r[0]);
DataRow[] rows=ds.Tables[0].Select("group='"+r[0]+"'");
foreach(DataRow row in rows)
tree.Nodes[tree.Nodes.Count-1].Nodes.Add(row[1]);
}
我试了一下你的方法
tree.Nodes.Add(r[0]);和tree.Nodes[tree.Nodes.Count-1].Nodes.Add(row[1]);中的r[0]和r[1]提示错误无法转换成String类型。
不知道如何解决
大家帮看下
<WAWA>
<dep>
<deptid>1</deptid>
<deptdesc>好友</deptdesc>
</dep>
<dep>
<deptid>2</deptid>
<deptdesc>陌生人</deptdesc>
</dep>
<emp>
<empdesc>张三</empdesc>
<emp_dept_id>1</emp_dept_id>
</emp>
<emp>
<empdesc>李林</empdesc>
<emp_dept_id>1</emp_dept_id>
</emp>
<emp>
<empdesc>张科</empdesc>
<emp_dept_id>2</emp_dept_id>
</emp>
</WAWA>我只想读上面的XML格式的XML文件,读成以下的效果
|————好友
| |——张三
| |——李林
|
|————陌生人
| |——张科
| |——上面那些大虾发那些都是正确的,但读我上面格式的XML文件都有错误
大家帮我!
<WAWA>
<dep>
<deptid>1</deptid>
<deptdesc>好友</deptdesc>
</dep>
<dep>
<deptid>2</deptid>
<deptdesc>陌生人</deptdesc>
</dep>
<emp>
<empdesc>张三</empdesc>
<emp_dept_id>1</emp_dept_id>
</emp>
<emp>
<empdesc>李林</empdesc>
<emp_dept_id>1</emp_dept_id>
</emp>
<emp>
<empdesc>张科</empdesc>
<emp_dept_id>2</emp_dept_id>
</emp>
</WAWA>上面的XML文件是 一个数据库生成的
表一dep
deptid deptdesc
1 好友
2 陌生人表二empempdesc emp_dept_id
张三 1
李林 1
张科 2大家帮帮呀 急需解决
但我觉得这不是一个好的解决方法.(如果是做类似qq的好友分类功能的话)
xml可以这样:
<node>
<type name="好友">
<friend>张三</friend>
<friend>李四</friend>
</type>
<type name="黑名单">
<friend>王五</friend>
<friend>张科</friend>
</type>
……
</node>这样程序的遍历只在有好友添加等操作时执行。而在读取好友列表时直接交给treeview就行了。这样我想执行程序的效率会高点~对于xml文件的操作也简单很多。
谢谢 我想跟了聊下 给你QQ我
你的XML文件怎么读呀问题还没解决 大家帮下忙
谢谢