поиск данных из файла XML - PullRequest
       19

поиск данных из файла XML

0 голосов
/ 24 февраля 2010

Мне нужно отфильтровать результаты, полученные при загрузке моего XML-файла. Например, мне нужно искать в данных XML для элементов с ключевым словом "Химия", например. Приведенный ниже пример XML представляет собой сводку моего файла XML. Данные загружаются в сетку. Не могли бы вы помочь? Спасибо! * * 1001

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

1 Ответ

0 голосов
/ 24 февраля 2010

Я должен предложить вам проверить XQuery и узнать, как его использовать в VB, поскольку он предназначен именно для такого рода сценариев. Поначалу это немного пугает, как и большинство языков, но оно достаточно мощное и сделает вашу работу тривиальной.

XQuery - это язык для описания поиска в XML. XPath - это строка поиска, описывающая «путь» содержимого в XML. Вы можете легко искать вещи по имени элемента, значению элемента, имени / значению атрибута и т. Д.

К сожалению, я не знаю Visual Basic и не использовал его с 16 лет, поэтому я не могу помочь вам больше, извините. Но вы никогда не пожалеете, узнав, как использовать XQuery. Это действительно раскрывает истинную силу XML.

Для чего стоит (правда, не так много, пока вы не выясните, как использовать XQuery в VB), вот несколько примеров того, что вы можете сделать для настройки поиска XPath:

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

Опять же, не пугайтесь этого, просто найдите несколько основных руководств по XQuery для VB, и вы поймете это в кратчайшие сроки. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...