Heim >Java >javaLernprogramm >Wie generiert man XPaths für alle Knoten in einem XML-Dokument mit Java?

Wie generiert man XPaths für alle Knoten in einem XML-Dokument mit Java?

DDD
DDDOriginal
2024-12-07 08:05:14164Durchsuche

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

Generieren/Abrufen von Xpath aus XML in Java

Interessiert an Ratschlägen und nicht an tatsächlicher Implementierung. Suchen Sie nach einem Java-Ansatz, um ein XML-Dokument zu durchlaufen, Knoten auf das Vorhandensein von Attributen zu überprüfen und XPaths zu generieren.

Ziel

Xpaths für alle Knoten im folgenden XML-Dokument generieren:

<root>
    <elemA>one</elemA>
    <elemA attribute1='first' attribute2='second'>two</elemA>
    <elemB>three</elemB>
    <elemA>four</elemA>
    <elemC>
        <elemB>five</elemB>
    </elemC>
</root>

Erwartet Ergebnis:

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

Update

Diese Lösung verwendet eine XSLT-Transformation, um das gewünschte Ergebnis zu erzielen:

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

Bei Anwendung auf das bereitgestellte XML-Dokument es erzeugt die erwarteten XPaths.

Das obige ist der detaillierte Inhalt vonWie generiert man XPaths für alle Knoten in einem XML-Dokument mit Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn