Sie haben mehrere Möglichkeiten.
Eine besteht darin, Ihr XML in ein DOM (Document Object Model) umzuwandeln und einen XPath-Ausdruck darauf zu verwenden, um den gewünschten Wert zu erhalten. JDOM könnte gut passen. Siehe diese Frage und ihre Antwort für Beispiele: Select a node using xpath and jdom
Der XPath-Ausdruck, den Sie benötigen, ist //mxCell[@parent='4']/@id
. Beachten Sie, dass Sie, wenn ein Standard-Namespace in Ihrem XML-Dokument definiert ist (Sie haben einen Auszug bereitgestellt, nicht das gesamte Dokument, also kann ich es nicht sagen), das an einen Präfix binden und im XPath-Ausdruck verwenden.
Eine weitere Option, die keine externen Abhängigkeiten erfordert, ist die Verwendung von XSLT. Überprüfen Sie das Paket javax.xml.transform
für weitere Informationen. Ein Stylesheet, das würde nur ausgegeben, der Wert, den Sie zur Verfügung gestellt hier wollen:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="node()|@*">
<xsl:apply-templates select="node()|@*" />
</xsl:template>
<xsl:template match="//mxCell[@parent='4'][1]">
<xsl:value-of select="@id" />
</xsl:template>
</xsl:stylesheet>
Beachten Sie, dass dies das id-Attribut des ersten mxCell
Elements mit einem übergeordneten Attribute nur dann ausgegeben, den Wert 4. Das hat das, was die [1]
tut am Ende dieses XPath-Ausdrucks.
Wenn der zu suchende Wert dynamisch ist (statt immer 4), empfehle ich einen XSLT-Parameter zu verwenden, um ihn an den Transformator zu übergeben.
Um die Ausgabe der XSLT zu analysieren und mehrere Werte zu behandeln, überlasse ich es Ihnen. Es sollte einfach sein, von hier fortzufahren. Beachten Sie, dass der XSLT-Ansatz wahrscheinlich der leistungsfähigste sein wird. JDOM ist eine feine Bibliothek, aber für große Dokumente wird der Overhead ziemlich bedeutend sein, so dass die Speicherbenutzung ein Problem werden kann.
Schleife Throught Knoten (‚mxCell‘) und für jeden ‚Eltern‘ Wert suchen, wenn ‚4‘ gefunden wird, erhalten die ‚id‘ in einer Liste (oder besser, nimm den Knoten in einer Liste). – Tokazio