none
vb.net linq xml 查詢 RRS feed

  • 問題

  • 各位前輩好 下面是小弟的XML檔案,小弟剛學linq 有上網爬文 不知道哪裡有寫錯

    <NewDataSet>
      <Table>
        <ITEM_ID>Test1ID</ITEM_ID>
        <ITEM_NAME>Test1_Name</ITEM_NAME>
        <ITEM_BARCODE>1111</ITEM_BARCODE>
        <ITEM_PRICE2>100</ITEM_PRICE2>
      </Table>
      <Table>
        <ITEM_ID>Test2_ID</ITEM_ID>
        <ITEM_NAME>Test2_Name</ITEM_NAME>
        <ITEM_BARCODE>2222</ITEM_BARCODE>
        <ITEM_PRICE2>200</ITEM_PRICE2>
      </Table>
    </NewDataSet>

     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim myXElement As XElement = XElement.Load(Application.StartupPath + "\item.xml")
            Dim recordset = From ex In myXElement.Elements Where ex.Attribute("ITEM_BARCODE").Value = "2222"
            For Each x As XElement In recordset
                MsgBox(x.Attribute("ITEM_NAME").Value)
            Next
        End Sub

    錯誤訊息是

    並未將物件參考設定為物件的執行個體

    我在debug上有看到load的時候有顯示資料


    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....

    2012年6月12日 下午 07:34

解答

  • 你把 Element 和 Attribute 搞混了吧?

    Dim recordset = From ex In myXElement.Elements Where ex.Name == "ITEM_BARCODE" && ex.Value = "2222"


    學習不是查個 Google 套個書上的範例就算了,而是去熟悉了解每個程式碼背後的意義,否則就算學個幾百年,它也不會是你的。
    =================================
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年6月12日 下午 11:28
    版主

所有回覆

  • 你把 Element 和 Attribute 搞混了吧?

    Dim recordset = From ex In myXElement.Elements Where ex.Name == "ITEM_BARCODE" && ex.Value = "2222"


    學習不是查個 Google 套個書上的範例就算了,而是去熟悉了解每個程式碼背後的意義,否則就算學個幾百年,它也不會是你的。
    =================================
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年6月12日 下午 11:28
    版主
  • 我剛剛有去看一下余小章的文章了 http://www.dotblogs.com.tw/yc421206/archive/2010/08/10/17108.aspx

    了解節點的屬性ex.Attribute 及 name和 value,不過我的XML節點沒有屬性所以搜尋不到東西

    我想要利用 itembarcode 的 值 去搜尋 它的商品名稱

    我的barcode 的值利用 innerText取得

    如果沒有使用linq 過濾掉 其他商品

    Dim index As Integer = -1

            Dim doc As New XmlDocument
            doc.Load(Application.StartupPath + "\item.xml")
            Dim root As XmlElement = doc.DocumentElement

            Dim List As XmlNodeList = root.GetElementsByTagName("ITEM_BARCODE")

            For i = 0 To List.Count - 1
                If (List(i).InnerText = "1111") Then

                    index = i

                    List = root.GetElementsByTagName("ITEM_ID")
                    Dim myproduct As String = List(i).InnerText
                    Exit For

                End If

            Next


     


    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....

    2012年6月13日 上午 02:58
  • 謝謝前輩我又爬文了一下

                 

      Dim doc As XDocument
            doc = XDocument.Load(Application.StartupPath + "\item.xml")

            Dim qEmp = (From xe In doc.Descendants.Elements("Table") _
            Where xe.<ITEM_BARCODE>.Value = "1111" _
             Select New With { _
            .ITEM_ID = xe.<ITEM_ID>.Value, _
            .ITEM_NAME = xe.<ITEM_NAME>.Value, _
            .ITEM_BARCODE = xe.<ITEM_BARCODE>.Value, _
            .ITEM_PRICE2 = xe.<ITEM_PRICE2>.Value _
             }).FirstOrDefault

            MessageBox.Show(qEmp.ITEM_ID + "," + qEmp.ITEM_NAME + "," + qEmp.ITEM_PRICE2)

    參考網址http://www.aspfree.com/c/a/VB.NET/LINQ-to-XML-Programming-Using-Visual-BasicNET-2008/


    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....


    2012年6月13日 上午 03:40