> Java > java지도 시간 > Java의 XML 문서에서 XPath 표현식을 프로그래밍 방식으로 생성하는 방법은 무엇입니까?

Java의 XML 문서에서 XPath 표현식을 프로그래밍 방식으로 생성하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-30 19:24:15
원래의
228명이 탐색했습니다.

How to Programmatically Generate XPath Expressions from an XML Document in Java?

Java의 XML에서 XPath를 생성/가져오는 방법

소개

이 문서에서는 Java의 XML 문서에서 XPath 표현식을 추출하는 방법에 대한 지침을 제공합니다. . XML 노드를 순회하고, 속성 존재를 확인하고, 이에 따라 XPath 문자열을 생성하는 프로세스를 다룹니다.

목표

우리의 목표는 다음 XML 문서에서 XPath 표현식을 생성하는 것입니다.

<root>
    <elemA>one</elemA>
    <elemA attribute1='first' attribute2='second'>two</elemA>
    <elemB>three</elemB>
    <elemA>four</elemA>
    <elemC>
        <elemB>five</elemB>
    </elemC>
</root>
로그인 후 복사

다음 XPath를 얻습니다. 표현식:

//root[1]/elemA[1]='one'
//root[1]/elemA[2]='two'
//root[1]/elemA[2][@attribute1='first']
//root[1]/elemA[2][@attribute2='second']
//root[1]/elemB[1]='three'
//root[1]/elemA[3]='four'
//root[1]/elemC[1]/elemB[1]='five'
로그인 후 복사

구현

1. XML 문서 탐색:

JDOM 또는 SAX와 같은 Java XML 구문 분석 라이브러리를 사용하여 XML 노드를 탐색합니다.

2. 속성 존재 확인:

각 노드에 대해 속성이 있는지 확인합니다. 그렇지 않다면 XPath 생성을 진행하세요.

3. 속성이 있는 노드에 대한 XPath 생성:

속성이 있는 노드의 경우 노드와 각 속성 모두에 대한 XPath 표현식을 생성합니다.

4. XPath 표현식 결합:

노드와 속성에 대해 생성된 XPath 표현식을 연결하여 최종 XPath 문자열을 만듭니다. 예:

String xpath = "//root[1]/elemA[1]='" + nodeValue + "'";
로그인 후 복사

5. 특수 사례 처리:

XPath 표현식의 공백이나 작은따옴표로 속성 값을 묶어야 하는 등의 특수 사례를 고려하세요.

다음 코드 조각 구현을 보여줍니다. Java:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class GenerateXPath {

    public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
        // Read the XML file
        File xmlFile = new File("path_to_xml.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(xmlFile);

        // Traverse the XML nodes
        NodeList nodes = doc.getElementsByTagName("*");
        for (int i = 0; i < nodes.getLength(); i++) {
            Node node = nodes.item(i);

            // Check for attribute existence
            if (node.getAttributes().getLength() == 0) {
                // Generate XPath for nodes without attributes
                String xpath = generateXPath(node);
                System.out.println(xpath);
            } else {
                // Generate XPath for nodes with attributes
                xpath = generateXPathWithAttributes(node);
                System.out.println(xpath);
            }
        }
    }

    private static String generateXPath(Node node) {
        String xpath = "";

        // Append tag name
        xpath += "/" + node.getNodeName();

        // Append position index
        NodeList siblings = node.getParentNode().getChildNodes();
        int position = 1;
        for (int i = 0; i < siblings.getLength(); i++) {
            if (siblings.item(i).getNodeName().equals(node.getNodeName())) {
                position++;
            }
        }
        xpath += "[" + position + "]";

        return xpath;
    }

    private static String generateXPathWithAttributes(Node node) {
        List<String> xpathParts = new ArrayList<>();

        // Append tag name
        xpathParts.add("/" + node.getNodeName());

        // Append position index
        NodeList siblings = node.getParentNode().getChildNodes();
        int position = 1;
        for (int i = 0; i < siblings.getLength(); i++) {
            if (siblings.item(i).getNodeName().equals(node.getNodeName())) {
                position++;
            }
        }
        xpathParts.add("[" + position + "]");

        // Append attributes
        NamedNodeMap attributes = node.getAttributes();
        for (int i = 0; i < attributes.getLength(); i++) {
            Node attribute = attributes.item(i);
            xpathParts.add("[@" + attribute.getNodeName() + "='" + attribute.getNodeValue() + "']");
        }

        return String.join("", xpathParts);
    }
}
로그인 후 복사

결론

위에 설명된 단계에 따라 Java에서 XML 문서에 대한 XPath 표현식을 프로그래밍 방식으로 생성하여 XML 콘텐츠에서 데이터를 추출하기 위한 자동화된 접근 방식을 제공할 수 있습니다.

위 내용은 Java의 XML 문서에서 XPath 표현식을 프로그래밍 방식으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿