2015-02-09 78 views
1

我需要使用元素值獲取xml元素,我必須使用jaxb獲取具有xml元素的父元素?如何使用元素值獲取xml元素?

示例XML:

<ifx> 
<nam-ref>LID</nam-ref> 
<val>01</val> 
<then> 
    <int> 
     <name>WHEELSPEED</name> 
     <description></description>    
    </int> 
    <int> 
     <name>FRONT</name> 
     <description></description> 
    </int> 
    <manyInt> 
     <int> 
      <name>REAR_LEFT</name> 
      <description></description> 
     </int> 
    </manyInt> 
    <int> 
     <name>REAR_RIGHT</name>   
    </int> 
</then> 

我只知道名字值 「REAR_LEFT」。有了這個我找到了xml元素和它的父元素。

+0

是否需要進行JAXB?這恕我直言,呼喊的XPath或數據投影。 – Cfx 2015-02-09 14:32:45

+0

其良好的是JAXB,其他方式也未嘗不可 – user3797234 2015-02-10 09:07:44

回答

0

如果您有一個模式並生成很多類並遍歷每個屬性以查找您要搜索的值,那麼可以使用JAXB執行此操作。 或者你用一點點data projection(披露:我是附屬於該項目):

import org.xmlbeam.XBProjector; 
import org.xmlbeam.XBProjector.Flags; 
import org.xmlbeam.annotation.XBRead; 

public class Demo { 

    public interface Projection { 

     @XBRead("name()") 
     String getType(); 

     @XBRead("./name") 
     String getName(); 

     @XBRead("./description") 
     String getDescription(); 
    } 

    public static void main(String[] args) { 
     String xpath="//*[name='REAR_LEFT']"; 
     Projection projection = new XBProjector(Flags.TO_STRING_RENDERS_XML).io().url("res://data.xml").evalXPath(xpath).as(Projection.class); 
     System.out.println(projection.getType()+":"+projection.getName()+" "+projection.getDescription()); 
     System.out.println("As XML:\n"+projection); 
    } 

} 

你XML的修正後(添加一個根元素,關閉IFX元素)這個程序打印出:

int:REAR_LEFT 
As XML: 
<int> 
    <name>REAR_LEFT</name> 
    <description/> 
</int> 

這是它如何工作的:

  • 中的XPath //*[name='REAR_LEFT']選擇每一個有一個名爲「名」與內容「REAR_LEFT」子元素。
  • 的XBProjector「項目」所選擇的元件的Java接口Projection
  • 投影接口可以由定義的投影方法(例如類型,名稱&描述訪問元素中的數據=
  • 投影接口,可打印聲稱自己是XML
+0

非常感謝!我需要找到一個更多幫助int的父元素ie manyInt – user3797234 2015-02-10 10:41:08

+0

如果你需要走一步到int的父親,只需將「..」添加爲步驟表達式:'// * [name ='REAR_LEFT']/..' – Cfx 2015-02-10 10:46:02