我正在用Java编写一个RESTful Web服务。 这个想法是“裁减”一个XML文档,去掉所有不需要的内容(〜98%),只留下我们感兴趣的标签,同时保持文档的结构,如下所示(我无法提供出于保密原因实际的XML内容):Java REGEX XML解析/裁减同时维护结构HowTo
<sear:SEGMENTS xmlns="http://www.exlibrisgroup.com/xsd/primo/primo_nm_bib" xmlns:sear="http://www.exlibrisgroup.com/xsd/jaguar/search">
<sear:JAGROOT>
<sear:RESULT>
<sear:DOCSET IS_LOCAL="true" TOTAL_TIME="176" LASTHIT="9" FIRSTHIT="0" TOTALHITS="262" HIT_TIME="11">
<sear:DOC SEARCH_ENGINE_TYPE="Local Search Engine" SEARCH_ENGINE="Local Search Engine" NO="1" RANK="0.086826384" ID="2347460">
[
<PrimoNMBib>
<record>
<display>
<title></title>
</display>
<sort>
<author></author>
</sort>
</record>
</PrimoNMBib>
]
</sear:DOC>
</sear:DOCSET>
</sear:RESULT>
</sear:JAGROOT>
</sear:SEGMENTS>
当然,这仅仅是我们感兴趣的标签的结构 - 有数百个标签,但它们是不相关的。
方括号([]
)不是XML的一部分,并且表示元素<PrimoNMBib></PrimoNMBib>
是子项列表的元素,并且不止一次出现 - 每次从RESTFUL服务搜索匹配时都会出现一个元素。
我一直在尝试使用正则表达式解析文档,以便仅保留上面显示的结构的片段以及<title>
和<author>
的值,同时删除标签之间的所有其他标签,包括其他标签,但我不能得到它为我的生活工作...
以前我试过它使用XSLT,但对于未解决的原因,也没有工作...或我已经问过一个问题XSLT执行...
无论如何,我将非常感谢提示/提示/解决方案,如何使用正则表达式和Java来解决这个问题...
我很遗憾听说为此设计的XSLT不适合您。用正则表达式来做它听起来非常困难。事实上,除了使用XML解析库之外,其他任何方式听起来都很难。也许像制作一个[SAXParser](http://docs.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParser.html)并构建一堆祖先标签可能会有所帮助? – 2012-04-27 13:30:03
非常感谢Rob。也许你能够建议如何用XSLT解决这个问题?也许你会能够为我的XSLT实现建议一些东西?:http://stackoverflow.com/questions/10340023/restful-glassfish-xml-xslt-stylesheet-java-transformation-produces-empty-output – Piotr 2012-04-27 13:39:44
如果有保证的话标签是一个独立的行,并删除不必要的标签不会制止xml结构的有效性,你可以使用正则表达式的脚本(perl,bash,sed,python等)来读取这些行,不包含所需标签的开口和结尾。 – 2012-04-27 13:44:33