2010-02-24 4 views
0

Je dois filtrer les résultats obtenus lorsque je charge mon fichier xml. Par exemple, j'ai besoin de rechercher les données XML pour les éléments avec le mot-clé "Chimie" par exemple. L'exemple ci-dessous xml est un résumé de mon fichier xml. Les données sont chargées dans une grille. Pourriez-vous aider? Merci!rechercher un jeu de données à partir du fichier xml

fichier Xml (résumé):

<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>

Mon code derrière la morue e est:

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 

Répondre

0

je dois dire que vous consultez XQuery et comment l'utiliser en VB, car il est conçu précisément pour ce genre de scénarios. C'est un peu intimidant au début comme la plupart des langues, mais c'est assez puissant et cela rendra ce que vous faites trivial.

XQuery est un langage permettant de décrire les recherches en XML. XPath est une chaîne de recherche décrivant le "chemin" des choses en XML. Vous pouvez facilement rechercher des éléments par nom d'élément, valeur d'élément, nom d'attribut/valeur, etc.

Malheureusement je ne connais pas Visual Basic et je ne l'utilise pas depuis l'âge de 16 ans, donc je ne peux pas vous aider plus que cela, désolé. Mais vous ne regretterez jamais d'apprendre à utiliser XQuery. Cela fait ressortir la véritable puissance de XML.

Pour ce que ça vaut la peine (il est vrai pas beaucoup jusqu'à ce que vous avez compris comment utiliser XQuery en VB), voici quelques exemples de ce que vous pouvez faire pour configurer des recherches XPath:

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

Encore une fois, ne soyez pas intimidé par cela, il suffit de trouver quelques tutoriels XQuery de base pour VB et vous comprendrez en un rien de temps. :)

+0

Salut, merci beaucoup. J'ai pris votre suggestion. http://stackoverflow.com/questions/2336450/display-xml-data – Anelim

Questions connexes