2010-02-24 103 views
0

我需要过滤我加载我的xml文件时获得的结果。例如,我需要在xml数据中搜索关键字“Chemistry”的项目。下面的xml示例是我的xml文件的摘要。数据在gridview中加载。你能帮忙吗?谢谢!从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>

我身后鳕代码e是:

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 

回答

0

我必须建议你看看XQuery和如何因为它的设计正是这种情况下使用它在VB。起初它和大多数语言一样有点吓人,但它很强大,会让你做的事情变得微不足道。

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

不幸的是我不知道的Visual Basic,并没有使用它,因为我16,所以我不能帮你更多比那,对不起。但是你永远不会后悔学习如何使用XQuery。它确实带出了XML的真正力量。

对于它的价值(当然不是很多,直到你弄清楚如何在VB中使用XQuery),这里是你可以做什么来配置XPath搜索一些例子:

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

同样,不要被它吓倒,只需找到一些基本的VB的XQuery教程,你就能很快找到答案。 :)

+0

嗨,非常感谢。我已经采纳了你的建议。 http://stackoverflow.com/questions/2336450/display-xml-data – Anelim 2010-02-25 18:12:36