【问题标题】:search dataset from xml file从 xml 文件中搜索数据集
【发布时间】:2011-01-20 15:04:11
【问题描述】:

我需要过滤加载 xml 文件时获得的结果。例如,我需要在 xml 数据中搜索带有关键字“Chemistry”的项目。下面的 xml 示例是我的 xml 文件的摘要。数据加载到网格视图中。你能帮忙吗?谢谢!

Xml 文件(摘要):

<CONTRACTS> <CONTRACT> <CONTRACTID>779</CONTRACTID> <NAME>ContractName</NAME> <KEYWORDS>Chemistry, Engineering, Chemical</KEYWORDS> <CONTRACTSTARTDATE>1/8/2005</CONTRACTSTARTDATE> <CONTRACTENDDATE>31/7/2008</CONTRACTENDDATE> <COMMODITIES><COMMODITY><COMMODITYCODE>CHEM</COMMODITYCODE> <COMMODITYNAME>Chemicals</COMMODITYNAME></COMMODITY></COMMODITIES> </CONTRACT></CONTRACTS>

我的代码背后的代码是:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim ds As DataSet = New DataSet()

    ds.ReadXml(AppDomain.CurrentDomain.BaseDirectory + "/testxml.xml")

    Dim dtContract As DataTable = ds.Tables(0)
    Dim dtJoinCommodities As DataTable = ds.Tables(1)
    Dim dtCommodity As DataTable = ds.Tables(2)
    dtContract.Columns.Add("COMMODITYCODE")
    dtContract.Columns.Add("COMMODITYNAME")

    Dim count As Integer = 0
    Dim commodityCode As String = Nothing
    Dim commodityName As String = Nothing

    Dim dRowJoinCommodity As DataRow
    Dim trimChar As Char() = {","c, " "c}

    Dim textboxstring As String = "KEYWORDS like 'pencil'"

        For Each dRow As DataRow In dtContract.Select(textboxstring)

        commodityCode = ""
        commodityName = ""

        count = dtContract.Rows.IndexOf(dRow)
        dRowJoinCommodity = dtJoinCommodities.Rows(count)

        For Each dRowCommodities As DataRow In dtCommodity.Rows
            If dRowCommodities("COMMODITIES_Id").ToString() = dRowJoinCommodity("COMMODITIES_ID").ToString() Then

                commodityCode = commodityCode + dRowCommodities("COMMODITYCODE").ToString() + ", "

                commodityName = commodityName + dRowCommodities("COMMODITYNAME").ToString() + ", "

            End If

        Next

       commodityCode = commodityCode.TrimEnd(trimChar)
        commodityName = commodityName.TrimEnd(trimChar)
        dRow("COMMODITYCODE") = commodityCode
        dRow("COMMODITYNAME") = commodityName

    Next


    GridView1.DataSource = dtContract
    GridView1.DataBind()
End Sub

【问题讨论】:

    标签: xml dataset filter


    【解决方案1】:

    我必须建议您查看 XQuery 以及如何在 VB 中使用它,因为它正是为此类场景而设计的。一开始它像大多数语言一样有点吓人,但它非常强大,可以让你做的事情变得微不足道。

    XQuery 是一种用于描述 XML 搜索的语言。 XPath 是一个搜索字符串,用于描述 XML 中内容的“路径”。您可以通过元素名称、元素值、属性名称/值等轻松查找内容。

    很遗憾,我不懂 Visual Basic,从 16 岁起就没有使用过它,所以我无法为您提供更多帮助,抱歉。但是您永远不会后悔学习如何使用 XQuery。它真正展现了 XML 的真正威力。

    对于它的价值(诚然,在您弄清楚如何在 VB 中使用 XQuery 之前,价值并不高),以下是一些配置 XPath 搜索的示例:

    http://wxww.w3schools.com/xpath/xpath_functions.asp

    同样,不要被它吓倒,只要找到一些用于 VB 的基本 XQuery 教程,您很快就会明白的。 :)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多