Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
Java 解析/扫描/标记化”;原始XML“;_Java_Xml_Parsing - Fatal编程技术网

Java 解析/扫描/标记化”;原始XML“;

Java 解析/扫描/标记化”;原始XML“;,java,xml,parsing,Java,Xml,Parsing,我有一个应用程序,需要在Java程序中解析或标记XML并保存原始文本(例如,不解析实体、不转换属性中的空格、保持属性顺序等) 今天我花了好几个小时尝试使用StAX、SAX、XSLT、TagSoup等,直到我意识到它们都没有做到这一点。我不能花更多的时间来解决这个问题,手动解析文本似乎非常重要。有没有Java库可以帮助我标记XML 编辑:我为什么要这样做?--我有一个很大的XML文件,我想以编程方式对其进行少量本地化更改,需要对其进行检查。能够使用差异工具是非常有价值的。如果解析器/过滤器规范化了

我有一个应用程序,需要在Java程序中解析或标记XML并保存原始文本(例如,不解析实体、不转换属性中的空格、保持属性顺序等)

今天我花了好几个小时尝试使用StAX、SAX、XSLT、TagSoup等,直到我意识到它们都没有做到这一点。我不能花更多的时间来解决这个问题,手动解析文本似乎非常重要。有没有Java库可以帮助我标记XML


编辑:我为什么要这样做?--我有一个很大的XML文件,我想以编程方式对其进行少量本地化更改,需要对其进行检查。能够使用差异工具是非常有价值的。如果解析器/过滤器规范化了XML,那么我在diff工具中看到的只是“红墨水”。首先生成XML的应用程序不是我可以轻易更改为生成“规范XML”的应用程序,如果有这样的应用程序的话。

我认为您可能需要生成自己的语法

一些链接:


我认为任何XML解析器都不能满足您的需要。为什么?例如,XML规范不强制属性排序。我认为您必须自己解析它,这是非常重要的


你为什么要这么做?我猜您有一些客户端“XML”强制或依赖于非标准构造。在这种情况下,我会后退并修复它,而不是通过大量的修复来尝试适应它。

我不完全确定我是否理解您要做的事情。您是否尝试过对文档中不希望解析器触及的部分使用CDATA区域

另外,依赖属性顺序也不是一个好主意——如果我正确地记住了XML标准,那么就永远不会期望顺序


听起来您正在处理一些格式错误的XML,首先将其转换为正确的XML会更容易。

为什么需要保留原始文本?原始文本中可能有他想要保留的换行符等。属性顺序等对于他的使用可能很重要。根据XML规范,任何非标记字符(包括空格,如换行符)都会传递给应用程序:……而且非常坦率地说,所有这些伟大的解析工具都可以执行SAX、StAX等,但不公开中间解析/标记化步骤,感觉就像有一系列的魔法盒,当我想要的是葡萄汁的时候,可以将污水转化为葡萄酒。如果你想使用diff工具,我会在使用该工具之前尝试“规范化”这两个文件。这样你就看到了真正的变化,不仅仅是格式上的变化。我认为你可能是对的,这很痛苦。我不知道如何使用ANTLR,甚至找不到机器可读的BNF for XML。W3C有,但BNF中穿插着文本。>:(这很痛苦,但据我所知,我做得很好,将来我可以使用我编写的代码。很高兴它为您所用。对于其他需要从XML规范中提取BNF的人,可以从XML版本中删除它(目前位于)。搜索元素请做一个好公民,详细说明如何解决它,以便每个人都能从您的经验中学习。@Martin:我使用“纯Java”,没有库,没有使用BNF,并编写了一个标记器,以保留每个元素的原始文本的方式解析XML。