>Java >java지도 시간 >Java를 사용하여 XML 문서의 모든 노드에 대한 XPath를 생성하는 방법은 무엇입니까?

Java를 사용하여 XML 문서의 모든 노드에 대한 XPath를 생성하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-07 08:05:14159검색

How to Generate XPaths for All Nodes in an XML Document Using Java?

Java의 XML에서 Xpath 생성/가져오기

실제 구현보다는 조언에 관심이 있습니다. XML 문서를 탐색하고 노드의 속성 존재 여부를 확인하고 Xpath를 생성하는 Java 접근 방식을 찾고 있습니다.

목표

다음 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>

예상 결과:

//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'

업데이트

이 솔루션은 XSLT 변환을 사용하여 원하는 결과를 얻습니다.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:strip-space elements="*"/>
    
    <xsl:variable name="vApos"'>'</xsl:variable>
    
    <xsl:template match="*[@* or not(*)] ">
        <xsl:if test="not(*)">
            <xsl:apply-templates select="ancestor-or-self::*" mode="path"/>
            <xsl:value-of select="concat('=',$vApos,.,$vApos)"/>
            <xsl:text>&#xA;</xsl:text>
        </xsl:if>
        <xsl:apply-templates select="@*|*"/>
    </xsl:template>
    
    <xsl:template match="*" mode="path">
        <xsl:value-of select="concat('/',name())"/>
        <xsl:variable name="vnumPrecSiblings" select="count(preceding-sibling::*[name()=name(current())])"/>
        <xsl:if test="$vnumPrecSiblings">
            <xsl:value-of select="concat('[', $vnumPrecSiblings +1, ']')"/>
        </xsl:if>
    </xsl:template>
    
    <xsl:template match="@*">
        <xsl:apply-templates select="../ancestor-or-self::*" mode="path"/>
        <xsl:value-of select="concat('[@',name(), '=',$vApos,.,$vApos,']')"/>
        <xsl:text>&#xA;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

제공된 XML 문서에 적용하면, 예상되는 Xpath를 생성합니다.

위 내용은 Java를 사용하여 XML 문서의 모든 노드에 대한 XPath를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.