如何在PHP(或C#)中修改非常大的XML文件中的元素
我收到非常大的xml文件,需要进行点编辑(在特定节点添加元素)。文件大小使得使用DOMDocument或SimpleXML不是一个选项。我正在使用XMLReader解析文件,但似乎我唯一的选择是使用XMLWriter完全重写文件。我很好奇有没有更好的办法?也许有什么东西可以让我在XMLReader的光标位置编辑文件如何在PHP(或C#)中修改非常大的XML文件中的元素,php,xml,Php,Xml,我收到非常大的xml文件,需要进行点编辑(在特定节点添加元素)。文件大小使得使用DOMDocument或SimpleXML不是一个选项。我正在使用XMLReader解析文件,但似乎我唯一的选择是使用XMLWriter完全重写文件。我很好奇有没有更好的办法?也许有什么东西可以让我在XMLReader的光标位置编辑文件 理想情况下,我会用PHP即时完成这项工作,但我会用C一次性完成这项工作,如果有一个工具可以更有效地完成这项工作,我会让它启动并运行。如果编辑可以用XSLT表示,我建议这样做,因为XS
理想情况下,我会用PHP即时完成这项工作,但我会用C一次性完成这项工作,如果有一个工具可以更有效地完成这项工作,我会让它启动并运行。如果编辑可以用XSLT表示,我建议这样做,因为XSLT解析器会优化查询,并且在大多数情况下只对文件执行一次运行
是一种描述如何将XML文档重写为另一个文档的语言(XML)。大多数XSLT解析器都经过了高度优化(在时间、内存和磁盘使用方面)。
XmlReader
in、XmlWriter
out无疑是最好的方法。我不想创建两个文件(一个是我正在读取的文件,另一个是我必须用XMLWriter创建的包含我编辑的新文件)。我有这个GB文件,我想使用文件句柄对文件中的一行进行点编辑。是否有一个文件阅读器可以让我进行行编辑?我想我可以把一行一行地读入DOMDocument中。对于您要做的事情,您必须复制该文件——使用DOM在内存中,或者使用XmlWriter在磁盘上。我不知道有哪种读取方法可以让你就地编辑原始文件。老实说,不管怎样,最好还是不要这样。如果你搞砸了,或者发生了意想不到的错误,你将破坏原始文件。在处理XML之类的东西时,这是一个特别糟糕的场景,也是一个很好的解决方案。值得为@Oddible指出的是,这仍然会创建第二个文件。谢谢,并且很好地回答了我前面提到的问题。我没有提到我正在做的编辑将插入外部数据——不幸的是,这将xslt排除在外。@奇怪的是,有多少外部数据?如果它不是一个累赘的数量,并且您不是每次都在做一些动态的事情,那么总是有xsl:param
或xsl:variable
它是动态的,从远程web服务进行获取。