2010-02-24 105 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