如何获取Java XML org.w3c.dom.Document的子集?

时间:2009-10-16 23:15:35

标签: java xml parsing

我有一个XML org.w3c.dom.Document对象。

它看起来像这样:

<A>
  <B>
     <C/>
     <D/>
     <E/>
     <F/>
   </B>
   <G>
     <H/>
     <H/>
     <J/>
   </G>
 </A>

如何转换Document对象,以便剥离根节点并返回另一个Document对象子集(按名称选择),如下所示:

<G>
   <H/>
   <H/>
   <J/>
</G>

我希望有这样的事情:

...
Document doc = db.parse(file);
Document subdoc = doc.getDocumentSubsetByName("G"); //imaginary method name
NodeList nodeList = subdoc.getElementsByTagName("H");

但我找不到这样的事情。


答案结果是这样的:

...
Document doc = db.parse();
doc.getDocumentElement.normalize();
NodeList a = doc.getElementsByTagName("A");
Element AsubNode = null;
if (a.item(0) != null) {
   AsubNode = (Element) a.item(0);
   nodeList = AsubNode.getElementsByTagName("G");
...

2 个答案:

答案 0 :(得分:0)

您只需使用getElementsByTagName("G")获取G元素,然后选择其中一个元素并在其上调用getElementsByTagName("H")

答案 1 :(得分:0)

当然,你总是可以使用XPath来做同样的事情:

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.NodeList;

final XPath xpath = XPathFactory.newInstance().newXPath();
final NodeList list = (NodeList) xpath.evaluate("/A/G/H", 
    doc.getDocumentElement(), XPathConstants.NODESET);

当元素的路径开始变得更复杂(需要属性谓词等)时,这开始得到回报。