【问题标题】:How to get child nodes within specific tags in xml using java?java - 如何使用java获取xml中特定标签内的子节点?
【发布时间】:2017-11-30 09:08:40
【问题描述】:

下面是我必须解析的 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 次)。

【问题讨论】:

  • 为什么你的意思是“将那个特定的标签附加到那个特定的位置”?你没有价值,对吧?那么空元素的目的是什么?
  • 说如果第一个 PARM 部分中缺少 p1,我想将 p1 添加到该部分。该值可以为零或任何值。

标签: java xml dom


【解决方案1】:

对我来说,最简单的方法是使用 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 会导致省略该元素。

【讨论】:

  • 这可能太多了,但您能否提供完整的代码或一些完整的示例。因为这对我来说有点复杂。谢谢。
  • 这是完整的代码,除了 import 语句、对 PACKAGE 和 XMLIN 的赋值以及 main 方法包装器。你当然可以自己添加?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2021-04-19
  • 2020-06-22
  • 1970-01-01
相关资源
最近更新 更多