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
Freigeben: 2024-12-07 08:05:14
Original
160 Leute haben es durchsucht

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>
Nach dem Login kopieren

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'
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage