我正在用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