2015-05-26 26 views
0

我有一個複雜的XML文件,其中包含將被解析的配置信息。舉例:Java - 如何解析和處理複雜的XML

<Rule> 
<ID></ID> 
<Center> 
    <MethodCall> 
     <Package></Package> 
     <Method> 
      <Pattern></Pattern> 
     </Method> 
     <Parameters> 
      <ParametersCount> 
       <Number>0,1-2,6+</Number> 
      </ParametersCount> 
      <Parameter> 
       <Package></Package> 
       <Position></Position> 
       <Const> 
        <Number></Number> 
       </Const> 
      </Parameter> 
     </Parameters> 
    </MethodCall> 
</Center> 
<Conditions> 
    <Or> 
     <Parameter> 
      <Position>1</Position> 
      <Package>com.test1</Package> 
     </Parameter> 
     <Parameter> 
      <Position>1</Position> 
      <Package>com.test2</Package> 
     </Parameter> 
    </Or> 
</Conditions> 
</Rule> 

它是AST分析儀的配置。該代碼將通過center標籤中的規則找到,稍後它將通過conditions規則進行分析。通過如何處理它?我有兩個想法:

1)爲每個標記(參數,包,方法等)製作很多類,然後讀取這些對象中的規則並在我的程序中處理它。

2)在處理代碼時使用Element和分析XML規則。

UPD:我會澄清我的需求。試想一下,你有很多應該被處理的選項。在示例的情況下,MethodCall可能不包含某些選項,解析器應該得到相應的對象(因此,如果它不包含Package,Method,應該找到任何方法調用),但是在查找之後,它將被檢查,如果它滿足Conditions標籤內的條件。這裏面的問題。我不知道如何存儲這個配置信息。例如,我們得到了一個方法調用,裏面的條件我們有兩個參數選項,比如在代碼中,以及如何驗證這個?創建一個條件列表(但我們需要有一個鏈表,因爲我們有邏輯運算符,如Not,Or,And),如List<Object>,但這些對象是Parameter/ParametersCount/MethodName/PackageName/etc類的對象。這是一個好主意嗎?

+1

谷歌搜索後的第一個鏈接[用java解析xml](http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/) – Lrrr

+0

我知道如何閱讀它,我不知道如何存儲和處理這個複雜的配置 – ivan

+0

如果您想做任何類型的查詢,還要對xPath進行一些研究 – MadProgrammer

回答

1

XML的預期大小是多少?如果它不是太大,則可以使用JAXB API將整個XML層次結構綁定到相關對象。這樣你就不必擔心創建/維護你的對象結構。 Jaxb會爲您生成它。 一旦你通過jaxb解析XML(稱爲解組),你在內存中有對象圖,你可以根據你的程序邏輯進行遍歷。