我們正在使用XML文件來保存我們的數據都是雙倍的。由於我們的數據非常龐大,因此在GB的範圍內,我們將其轉換爲字節以節省磁盤空間和訪問時間。此外,我們正在將數據寫入幾MB的數據塊中,並且新數據塊也可能來自與之前數據源相同的數據源,或者來自不同數據源。對於每個新源,我們都在XML文件中創建了一個元素,以便將來很容易地識別來自該源的數據。 我們面臨的問題是,如何識別與XML文件中的源對應的元素,然後將對應於該源的數據附加到已經在XML文件中捕獲的數據。我正在使用Linq XML,並無法谷歌任何解決方案使用此方法。我嘗試了XMLWriter類,但是使用它的問題是如何識別或訪問我想寫塊的元素。如何將二進制數據附加到XML文件中特定位置的特定節點
0
A
回答
1
對於編寫大量二進制數據(由於需要將二進制數據存儲爲Base64字符串或其他字符安全編碼)而言,XML並不是一種好的格式,也不適用於在大型數據庫中更新數據塊文件。我建議重新考慮你的文件格式。
如果你必須去與XML:
- 確保您的字節數組時,寫入XML
- 你必須複製XML時要在中間插入數據base64編碼。考慮使用XmlReader和XmlWriter。將源XML複製到要添加數據的位置,將數據添加到輸出寫入器,然後完成複製剩餘部分的XML。
- 避免在內存中加載整個XML,因爲它會導致您的GB數據範圍出現問題。
0
我確定我沒有這裏的全貌,但很難理解你爲什麼不使用數據庫。儘管如此,跟進阿列克謝的帖子,這裏是你如何使用的XmlReader和XmlWriter的來完成我覺得你想要做一個人爲的例子:
//start with some dummy data
string bigData = "<bigdata><rec id='1'>1234</rec><rec id='2'>2468</rec></bigdata>";
string criterion = "2";
string append = "10";
string newValue = "";
bool match = false;
StringBuilder sb = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(sb))
{
using (XmlReader reader = XmlReader.Create(new StringReader(bigData)))
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
if (reader.LocalName == "rec")
{
match = reader.GetAttribute("id").ToString() == criterion;
}
writer.WriteStartElement(reader.LocalName);
writer.WriteAttributes(reader, true);
if (reader.IsEmptyElement)
{
writer.WriteEndElement();
}
break;
case XmlNodeType.Text: // do the append here
newValue = match ? reader.Value + append : reader.Value;
writer.WriteString(newValue);
break;
//other cases based on node types
case XmlNodeType.EndElement:
writer.WriteFullEndElement();
break;
}
}
writer.Flush();
string x = sb.ToString();//output
}
}
相關問題
- 1. 如何使用節點將流式數據附加到文件中的特定位置並檢索?
- 2. 如何附加到Ruby文件中的特定位置?
- 3. 如何將孩子添加到特定位置的節點?
- 4. 如何使用XSLT定位xml文檔中的特定節點?
- 5. 在特定位置插入XML節點
- 6. 將XML節點添加到XmlDocument中的特定節點
- 7. 使用SQL在特定位置插入特定的XML節點
- 8. 將XML數據添加到特定的父節點
- 9. 在二進制文件中的特定位置跳轉
- 10. 從特定位置讀取C#中的二進制文件
- 11. 在特定位置添加XML數據
- 12. 如何找到特定的xml節點?
- 13. 如何從特定的目標文件製作特定的二進制文件?
- 14. XML到PSV特定節點
- 15. 子條目添加到XML文件中的特定節點vbscipt
- 16. 如何在非二進制樹中查找特定節點?
- 17. 將值插入到xml文件中的特定節點
- 18. 將特定記錄添加到二進制文件C++
- 19. 如何將數據寫入TXT文件中的特定位置?
- 20. 如何將數據附加到二進制文件?
- 21. python從特定位置讀取二進制文件
- 22. 將二進制數據附加到c中的文件
- 23. 循環遍歷二進制文件中的特定字節
- 24. 編輯二進制文件中的特定字節 - Java
- 25. Couchbase是否能夠將特定子集的數據複製到特定節點?
- 26. 將新屬性附加到對象中的特定位置
- 27. 將程序的位代碼附加到二進制文件中
- 28. 將XML保存到特定位置
- 29. XSLT XML到XML選擇特定節點
- 30. 如何獲得xml文件中的特定節點與蟒蛇
究竟你的「將其轉換爲字節」是什麼意思?這就是每個流都會做的。 – 2011-03-30 18:06:05