- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个问题,我已经处理了很长时间了。我有一个包含超过 50000 条记录的 XML 文件(一条记录有 3 个级别)。我的一个应用程序使用此文件来控制文档发送(除其他信息外,该记录包含必须发送给特定人员的文档类型)。因此,在我的应用程序中,我将 XML 文件加载到 XmlDocument 中,然后通过使用 SelectNodes 方法,我创建了一个 XmlNodeList,我从中读取了我想要的数据。过程是这样的——我们的工作人员拿走人的身份证(简单的条形码)并用条形码阅读器读取它。读取条形码值后,我的应用程序会在 XML 文件中找到具有该 ID 的人,并将文档类型存储到字符串变量中。然后工作人员拿起单据读取其条码,如果单据条码的值与字符串变量中的值匹配,则应用程序记录将类型为xxxxxxxx的单据发送给ID为yyyyyyyyy的人。这是非常简单的代码,目前可以完美运行,它看起来是这样的:在 textBox1_TextChanged 事件中(工作人员读取人员 ID):
foreach(XmlNode node in NodeList){
if(String.Compare(node.Attributes.GetNamedItem("ID").Value.ToString(),textBox1.Text)==0)
{
ControlString = node.ChildNode[3].FirstChild.Attributes.GetNamedItem("doctype").Value.ToString();
break;
}
}
textBox2.Focus();
在 textBox2_TextChanged 事件上(工作人员读取文档条码):
if(String.Compare(textBox2.Text,ControlString)==0)
{
//Create a record and insert it into a SQL database
}
我的问题是 - 我的应用程序如何处理较大的 XML 文件(我被告知 XML 文件可能有多达 500,000 条记录),这种方法是否有效,或者我是否需要将文件切割成较小的文件.如果我必须削减它,请给我一些代码示例的想法,我试过这样做:读取整个记录并将其存储到一个字符串中:
private void WriteXml(XmlNode record)
{
tempXML = record.InnerXml;
temp = "<" + record.Name + " code=\"" + record.Attributes.GetNamedItem("code").Value + "\">" + Environment.NewLine;
temp += tempXML + Environment.NewLine;
temp += "</" + record.Name + ">";
SmallerXMLDocument += temp + Environment.NewLine;
temp = "";
i++;
}
tempXML、temp 和 SmallerXMLDocument 都是字符串变量。
然后在 button_Click 方法中,我将 XML 文件加载到 XmlNodeList 中(再次使用 XmlDocument.SelectNodes 方法),然后我尝试创建一个大字符串值来保存所有记录,如下所示:
foreach(XmlNode node in nodes)
{
if(String.Compare(node.ChildNode[3].FirstChild.Attributes.GetNamedItem("doctype").Value.ToString(),doctype1)==0)
{
WriteXML(node);
}
}
我的想法是创建一个字符串值(在本例中称为 SmallerXmlDocument),当我遍历整个 XML 文件时,只需将该字符串的值复制到一个新文件中。这有效,但仅适用于最多包含 2000 条记录的文件(我的记录远不止于此)。因此,如果我需要将文件切成更小的部分,最好的方法是什么(请记住,一个 XML 文件中可能有多达 50 万条记录)?
谢谢
最佳答案
首先,我怀疑您在滥用 XML API。您可以查询XmlDocument直接与 XPath立即获得结果,无需先选择记录列表并遍历它们。在任何时候都不需要将 XML 树的部分转换为字符串。
只要您不介意在您的应用程序上花费 50 到 500 兆字节的 RAM,将整个 XML 文档加载到内存中的方法就可以正常工作。
如果你想节省 RAM,你应该使用 XmlReader从磁盘流式传输 XML。
关于c# - 在 C# 中将大型 XML 文件切割成较小的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11325985/
Python 中是否有任何预制的优化工具/库来切割/切片值“小于”某物的列表? 问题来了:假设我有一个列表: a=[1,3,5,7,9] 我想删除所有 2 的项目,将会有很多迭代)。 我也可以使用二进
我创建了一个 fiddle 来更好地展示我想问的问题。 angle crop of pseudo element 这是一张显示所需结果的图片: li.active::after { conte
我有一个字符串如下: 2012/02/01,13:27:20,872226816,-1174749184,2136678400,2138578944,-17809408,2147352576 我想提取
RESTEasy 看起来会忽略尾部斜杠,因此我无法编写带有和不带有尾部斜杠的两个不同的 Web 服务,此示例显示: @Path("foo") public class TestClass {
mov rax,QWORD PTR [rbp-0x10] mov eax,DWORD PTR [rax] add eax,0x1 mov DWORD PTR [rbp-0x14], eax 下
我有以下 xml: External Vendor File External vendor file for so
我在 Python 中工作,并在 Pandas 中使用剪切功能。我想让我的 pd.cut 中的 bins 基于用户定义的逗号分隔整数,具有预定义的上限和下限。换句话说,我想将 bins 预定义为 [0
我正在尝试嵌入 ShareThis将代码写入使用 Bootstrap 创建的网站。 问题是由于某种原因,两个按钮的底部都被切断了,而且我似乎无法使用 Bootstrap 列偏移将按钮居中,因为使用这种
我正在尝试模拟无线传感器节点网络,以研究网络的稳健性。我面临以下问题: 我有一个具有一些边缘容量的节点网络。这相当于算法中的网络流问题。有一个源节点(检测某些事件)和一个接收节点(我的基站)。现在,我
我有一个 UIImageView,带有特定的图像。我还有一个形状奇怪的 UIBezierPath。我想将图像剪切成该形状并返回该形状的新图像。 形式为: func getCut(bezier:UIBe
我有一个大型的全局 .nc 文件数据集,我正试图将它们裁剪到一个较小的区域。我将此区域存储为 .shp 文件。 我曾尝试使用 Qgis 中的 gdal,但需要通过转换每个变量来做到这一点,我必须为所有
我正在使用以下命令来剪切 FLAC 文件:ffmpeg -i input.flac -ss 10s -t 10s -c copy output.flacoutput.flac包含正确的音频持续时间。但
我希望为以下组件制作足迹: AG EMCO HV power supply 现在,这个组件可以通过电路板安装,虽然它不是一个很高的组件,但我希望探索这个选项。我想一个附带问题是:PCB 制造商有多喜欢
我目前正在用 C++ 编写一个小程序(在 Mac 上,其中包含一些 C 代码)并且需要从套接字中检索二进制数据(效果很好),但我还需要切断 HTTP标题。 基本上,我连接到服务器,发送 HTTP GE
我想制作一个Python程序,其中在文本文件中给出DNA序列。它有超过9000个字符。我必须将序列剪成 3 个字符所以我们的框架从1到3读取,然后4到6,然后7到9,这被称为密码子。 例如,序列是 A
我正在开发一个迷你游戏,如果我将 DIN-Ax 作为输入,我需要找出可以在 DIN-A0 纸上画多少行。例如: ;car horizontal and cdr vertical lines (defi
我在下面有这个名为 monitor.log 的报告文件 switch#sh mac address-table int g1/0/1 Mac Address Table -----
我的设备上有 MPEG-TS 文件。我想从设备上的文件开始处截断一个相当准确的时间。 使用 FFmpegWrapper作为基地,我希望能够实现这一目标。 不过,我对 ffmpeg 的 C API 有点
我导出了两个字段:name和header从数据库中使用: SELECT name, header INTO OUTFILE '/var/lib/mysql-files/myfile.txt' FIEL
这个问题在这里已经有了答案: How do you parse and process HTML/XML in PHP? (31 个答案) 关闭 9 年前。 我尝试转换以下字符串 st
我是一名优秀的程序员,十分优秀!