有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java xml按id搜索元素

我们可以使用dom解析器在xml文件中按id搜索元素吗,例如:

<root>
  <context id="one">
    <entity>
      <identifier>new one</identifier>
    </entity>
  </context>

  <context id="two">
    <entity>
      <identifier>second one</identifier>
    </entity>
  </context>

</root>

我想要一个id为“one”的节点,我的代码

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File("filename.xml"));

Element ele = document.getElementById("one");

返回null

还有别的办法吗


共 (2) 个答案

  1. # 1 楼答案

    可以使用JDK/JRE中的javax.xml.xpathAPI通过XPath查找元素

    示例

    import java.io.File;
    import javax.xml.parsers.*;
    import javax.xml.xpath.*;
    import org.w3c.dom.*;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            Document document = docBuilder.parse(new File("filename.xml"));
    
            XPathFactory xpathFactory = XPathFactory.newInstance();
            XPath xpath = xpathFactory.newXPath();
            Element element = (Element) xpath.evaluate("//*[@id='one']", document, XPathConstants.NODE);
        }
    
    }
    
  2. # 2 楼答案

    尝试使用XML-Xpath表达式,这非常简单

    File fXmlFile = new File("filePath");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);
    
    
    doc.getDocumentElement().normalize();
    System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
    
    
    XPathFactory factory = XPathFactory.newInstance();
    
                XPath xpath = factory.newXPath();
    
                String expression;
                Node node;
    
                // 1. elements with id '1'
                expression = "//context[@id='one']"; 
                node = (Node ) xpath.evaluate(expression, doc, XPathConstants.NODE);