簡體   English   中英

如何使用Java在xml中的特定標簽內獲取子節點?

[英]How to get child nodes within specific tags in xml using java?

以下是我必須解析的xml文件。

<dataroot>
 <PARM>
   <P1>123</P1>
   <P2>abc</P2>
 </PARM>
 <PARM>
   <P1>456</P1>
   <P2>def</P2>
 </PARM>
 <PARM>
   <P1>789</P1>
   <P2>ghi</P2>
 </PARM>
.......(15times)
</dataroot>

我的目標是獲取子節點(即p1,p2而不是內部值),並將這些名稱與模板進行比較。

說如果p2不存在,我必須將該特定標簽附加到xml文件中的特定位置。 問題是當我使用getElementsByTagNames()並將其存儲在數組中,然后將其與包含datarootPARM的模板進行比較時,我也不想這樣做。

所以我怎么能只得到p1和p2(最多15次)。

對我而言,最簡單的方法是使用JAXB進行封送和封送,從而添加了PARM缺少的元素。 如果XML元素名稱要求大小寫不同,則需要在datarootPARM的類中添加一些批注,但這僅是幾行代碼即可進行編組和編組。

@XmlRootElement(name="dataroot")
@XmlType(propOrder = {"parm"})
public class Data {
    @XmlElement(name="PARM")
    private List<Parm> parm = new ArrayList<>();
    public List<Parm> getParm(){ return parm; }
}

@XmlRootElement(name="PARM")
public class Parm {
    private String p1="";
    @XmlElement(name="P1")
    public String getP1(){ return p1; }
    public void setP1( String v ){ p1 = v; }
}

在同一包中,添加包含單行的文件jaxb.index

Data

主程序:

JAXBContext jc = JAXBContext.newInstance( PACKAGE ); // dir path
Unmarshaller u = jc.createUnmarshaller();
Data data = (Data)u.unmarshal( new File( XMLIN ) );  // file path
Marshaller m = jc.createMarshaller();
Writer sw = ...;                  // whatever you need
m.marshal( data, sw );

注意字段p1的初始化。 這樣可以確保元素顯示為空字符串。 null將導致省略該元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM