Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP(或C#)中修改非常大的XML文件中的元素_Php_Xml - Fatal编程技术网

如何在PHP(或C#)中修改非常大的XML文件中的元素

如何在PHP(或C#)中修改非常大的XML文件中的元素,php,xml,Php,Xml,我收到非常大的xml文件,需要进行点编辑(在特定节点添加元素)。文件大小使得使用DOMDocument或SimpleXML不是一个选项。我正在使用XMLReader解析文件,但似乎我唯一的选择是使用XMLWriter完全重写文件。我很好奇有没有更好的办法?也许有什么东西可以让我在XMLReader的光标位置编辑文件 理想情况下,我会用PHP即时完成这项工作,但我会用C一次性完成这项工作,如果有一个工具可以更有效地完成这项工作,我会让它启动并运行。如果编辑可以用XSLT表示,我建议这样做,因为XS

我收到非常大的xml文件,需要进行点编辑(在特定节点添加元素)。文件大小使得使用DOMDocument或SimpleXML不是一个选项。我正在使用XMLReader解析文件,但似乎我唯一的选择是使用XMLWriter完全重写文件。我很好奇有没有更好的办法?也许有什么东西可以让我在XMLReader的光标位置编辑文件


理想情况下,我会用PHP即时完成这项工作,但我会用C一次性完成这项工作,如果有一个工具可以更有效地完成这项工作,我会让它启动并运行。

如果编辑可以用XSLT表示,我建议这样做,因为XSLT解析器会优化查询,并且在大多数情况下只对文件执行一次运行


是一种描述如何将XML文档重写为另一个文档的语言(XML)。大多数XSLT解析器都经过了高度优化(在时间、内存和磁盘使用方面)。
XmlReader
in、
XmlWriter
out无疑是最好的方法。我不想创建两个文件(一个是我正在读取的文件,另一个是我必须用XMLWriter创建的包含我编辑的新文件)。我有这个GB文件,我想使用文件句柄对文件中的一行进行点编辑。是否有一个文件阅读器可以让我进行行编辑?我想我可以把一行一行地读入DOMDocument中。对于您要做的事情,您必须复制该文件——使用DOM在内存中,或者使用XmlWriter在磁盘上。我不知道有哪种读取方法可以让你就地编辑原始文件。老实说,不管怎样,最好还是不要这样。如果你搞砸了,或者发生了意想不到的错误,你将破坏原始文件。在处理XML之类的东西时,这是一个特别糟糕的场景,也是一个很好的解决方案。值得为@Oddible指出的是,这仍然会创建第二个文件。谢谢,并且很好地回答了我前面提到的问题。我没有提到我正在做的编辑将插入外部数据——不幸的是,这将xslt排除在外。@奇怪的是,有多少外部数据?如果它不是一个累赘的数量,并且您不是每次都在做一些动态的事情,那么总是有
xsl:param
xsl:variable
它是动态的,从远程web服务进行获取。