none
xml讀檔 RRS feed

  • 問題

  • 大大您们好,我有兩個問題請教一下
    第一:若有一個xml檔,我有兩個程式會共用一檔案,其中有一個是做寫入,另一為讀取動作,寫入是利用搜尋xml節點和屬性將值寫入,而讀取是利用dataSet方式,請問大大我這樣的作法,還會發生錯誤(檔案重複使用)嗎?因為之前用別的方法會,可後來我改成這個方式,目前是還沒看到錯誤,可是我怕時間一久,可能會發生ㄧ次,謝謝
    第二:請問我要從xml讀出檔案寫成dataset再去取它的值,xml檔內容如下,請問大大我想讀取粗體部分,由於網路上的xml檔幾乎在此位置沒有寫值,所以來此尋求大大幫助,謝謝
    <Paraemeter>
       <Range_Set species="USER">2009/05/22
              <text type="Output Va (V)">1,200</text>
              <text type="Inv. ambient temp thres 1">1,200</text>
        </Range_Set>
    </Paraemeter>

    2009年5月25日 上午 02:21

解答

  • 你可以試著先將 XML 內容讀入記憶體,再由 XmlDocument.LoadXml() 載入。
    只要不要讓讀取端佔據 XML 檔太久,理論上比較不太會發生共用鎖定的問題。
    但如果是雙向型(雙方都會讀寫資料到 XML 檔)的,那你最好考慮使用資料庫。
    小人物一枚。
    • 已標示為解答 冰糖旋風 2009年5月25日 上午 09:01
    2009年5月25日 上午 04:14
    版主
  • 先用 FileStream 把檔案讀到變數中,再用變數的內容填到 XmlDocument.LoadXml()...

    FileStream fs = File.OpenRead("my.xml");
    StreamReader sr = new StreamReader(fs);
    
    string xmldata = sr.ReadToEnd();
    
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xmldata);
    
    ...

    小人物一枚。
    • 已標示為解答 冰糖旋風 2009年5月25日 上午 09:01
    2009年5月25日 上午 05:34
    版主

所有回覆

  • 1. 當然會有共用的問題,只是要看情況。
    2. 你有試 InnerText 嗎?
    小人物一枚。
    2009年5月25日 上午 03:13
    版主
  • 大大您好,您意思是說datatable也有InnerText屬性嗎,謝謝
    2009年5月25日 上午 03:44
  • 你可能要利用 XmlDataDocument 或是直接去讀 XML 檔來做,不要透過 DataTable。
    小人物一枚。
    2009年5月25日 上午 03:58
    版主
  • 大大您好,我之前也是利用xml去做的,但是我發現會有我一開始,即問題一的情況發生,所以我才會利用dataTable去讀,因為只有他是斷線時使用,我想這樣才不會和我要寫檔案進去的程式有衝突,還是有其他方法,謝謝
    2009年5月25日 上午 04:02
  • 你可以試著先將 XML 內容讀入記憶體,再由 XmlDocument.LoadXml() 載入。
    只要不要讓讀取端佔據 XML 檔太久,理論上比較不太會發生共用鎖定的問題。
    但如果是雙向型(雙方都會讀寫資料到 XML 檔)的,那你最好考慮使用資料庫。
    小人物一枚。
    • 已標示為解答 冰糖旋風 2009年5月25日 上午 09:01
    2009年5月25日 上午 04:14
    版主
  • 大大您好,可以請你再清楚一點嗎,我原本兩邊資料已經都是利用 XmlDocument.LoadXml();載入,你所謂的先"將XML 內容讀入記憶體",是說有一邊程式利用dataset將資料讀出存起來,再利用讀出的這些資料做XmlDocument.LoadXml();動作嗎,可是 XmlDocument.LoadXml();不是指載入資 料的意思嘛,謝謝
    2009年5月25日 上午 05:02
  • 先用 FileStream 把檔案讀到變數中,再用變數的內容填到 XmlDocument.LoadXml()...

    FileStream fs = File.OpenRead("my.xml");
    StreamReader sr = new StreamReader(fs);
    
    string xmldata = sr.ReadToEnd();
    
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xmldata);
    
    ...

    小人物一枚。
    • 已標示為解答 冰糖旋風 2009年5月25日 上午 09:01
    2009年5月25日 上午 05:34
    版主
  • 大大謝謝你,原來載入記憶體的方式,就是如你所寫的這個,謝謝
    2009年5月25日 上午 06:40