[英]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()
並將其存儲在數組中,然后將其與包含dataroot和PARM的模板進行比較時,我也不想這樣做。
所以我怎么能只得到p1和p2(最多15次)。
對我而言,最簡單的方法是使用JAXB進行封送和封送,從而添加了PARM缺少的元素。 如果XML元素名稱要求大小寫不同,則需要在dataroot
和PARM
的類中添加一些批注,但這僅是幾行代碼即可進行編組和編組。
@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.