XML 到使用数据集的树视图
本文关键字:视图 数据集 XML | 更新日期: 2023-09-27 18:34:17
我有一个具有以下结构的xml文件:
<table name="tblcats">
<row>
<Id>3680</Id>
<Industry>Associations</Industry>
<ParentId>1810</ParentId>
</row>
<row>
<Id>1592</Id>
<Industry>Fortune 100</Industry>
<ParentId>1810</ParentId>
</row>
<row>
</table>
我想使用此 xml 填充树视图。我创建了一个数据集并对其进行了排序并编写了以下代码:
Dim xmlfile As String = Server.MapPath("~/App_Data/Industries.xml")
Dim ds As New DataSet()
ds.ReadXml(xmlfile)
Dim sortedRows As DataRow()
sortedRows = ds.Tables(1).Select("", "ParentId")
Dim XDoc As New XmlDocument()
Dim XDec As XmlDeclaration = XDoc.CreateXmlDeclaration("1.0", Nothing, Nothing)
XDoc.AppendChild(XDec)
' iterate through the sorted data
' and build the XML document
For Each Row As DataRow In sortedRows
' create an element node to insert
' note: Element names may not have spaces so use ID
' note: Element names may not start with a digit so add underscore
Dim NewNode As XmlElement = XDoc.CreateElement("_" & Row("Id").ToString())
NewNode.SetAttribute("Id", Row("Id").ToString())
NewNode.SetAttribute("ParentId", Row("ParentId").ToString())
NewNode.SetAttribute("Industry", Row("Industry").ToString())
' special case for top level node
If CInt(Row("ParentId")) = -1 Then
XDoc.AppendChild(NewNode)
Else
' root node
' use XPath to find the parent node in the tree
Dim SearchString As [String]
SearchString = [String].Format("//*[@Id=""{0}""] ", Row("ParentId").ToString())
Dim Parent As XmlNode = XDoc.SelectSingleNode(SearchString)
If Parent IsNot Nothing Then
Parent.AppendChild(NewNode)
Else
' Handle Error: Employee with no boss
End If
End If
Next
' we cannot bind the TreeView directly to an XmlDocument
' so we must create an XmlDataSource and assign the XML text
Dim XDdataSource As New XmlDataSource()
XDdataSource.ID = DateTime.Now.Ticks.ToString()
' unique ID is required
XDdataSource.Data = XDoc.OuterXml
' we want the full name displayed in the tree so
' do custom databindings
Dim Binding As New TreeNodeBinding()
Binding.TextField = "FullName"
Binding.ValueField = "ID"
TreeView1.DataBindings.Add(Binding)
' Finally! Hook that bad boy up!
TreeView1.DataSource = XDdataSource
TreeView1.DataBind()
但它在这里失败:
SearchString = [String].Format("//*[@Id=""{0}""] ", Row("ParentId").ToString())
如何修复此 xPath 以匹配我的 XML?请建议如何解决此问题
尝试按如下方式更改 xpath-->
SearchString = [String].Format("//Id[.=""{0}""]/..", Row("ParentId").ToString())
@
符号用于检查匹配的属性值。 取出@
,然后重试。