2010-02-24 1 views
0

내 XML 파일을로드 할 때 얻은 결과를 필터링해야합니다. 예를 들어 키워드 "Chemistry"가있는 항목의 xml 데이터를 검색해야합니다. 아래 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>

내 코드 전자는 다음과 같습니다

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