Je souhaite lire des données XML à l'aide de XPath en Java, donc pour les informations que j'ai recueillies, je ne suis pas en mesure d'analyser XML selon mes besoins.
voici ce que je veux faire:
Obtenez le fichier XML en ligne via son URL, puis utilisez XPath pour l'analyser, je veux y créer deux méthodes. L'un est dans lequel j'entre un identifiant d'attribut de nœud spécifique, et j'obtiens tous les nœuds enfants comme résultat, et le second suppose que je veux juste obtenir une valeur de nœud enfant spécifique uniquement
<?xml version="1.0"?>
<howto>
<topic name="Java">
<url>http://www.rgagnonjavahowto.htm</url>
<car>taxi</car>
</topic>
<topic name="PowerBuilder">
<url>http://www.rgagnon/pbhowto.htm</url>
<url>http://www.rgagnon/pbhowtonew.htm</url>
</topic>
<topic name="Javascript">
<url>http://www.rgagnon/jshowto.htm</url>
</topic>
<topic name="VBScript">
<url>http://www.rgagnon/vbshowto.htm</url>
</topic>
</howto>
Dans l'exemple ci-dessus, je veux lire tous les éléments si je recherche via @name et aussi une fonction dans laquelle je veux juste que l'url de @name 'Javascript' ne renvoie qu'un élément de nœud.
Réponses:
Vous avez besoin de quelque chose dans le sens de ceci:
Ensuite, vous appelez en
expr.evaluate()
passant le document défini dans ce code et le type de retour que vous attendez, et vous convertissez le résultat en type d'objet du résultat.Si vous avez besoin d'aide avec une expression XPath spécifique, vous devriez probablement la poser comme des questions distinctes (sauf si c'était votre question en premier lieu ici - j'ai compris que votre question était de savoir comment utiliser l'API en Java).
Edit: (Réponse au commentaire): Cette expression XPath vous obtiendra le texte du premier élément URL sous PowerBuilder:
Cela vous donnera le deuxième:
Vous obtenez cela avec ce code:
Si vous ne savez pas combien d'URL se trouvent dans un nœud donné, vous devriez plutôt faire quelque chose comme ceci:
Et puis bouclez sur la NodeList.
la source
Vous pouvez essayer ça.
Document XML
Enregistrer sous
employees.xml
.Classe d'analyseur
La classe a les méthodes suivantes
Code source
la source
get
méthodes. Seule la chaîne XPath change et la plupart du reste du code reste le même. Peut-être qu'une seule méthode getValuesForXpath () suffit.Exemple de mise en route:
fichier xml:
Code Java:
la source
Voici un exemple de traitement de xpath avec vtd-xml ... pour un traitement XML robuste, il est sans pareil. voici un article récent sur ce sujet Traitement du XML avec Java - A Performance Benchmark
la source
Si vous avez un xml comme ci-dessous
et je voulais extraire le xml ci-dessous
Le code ci-dessous aide à atteindre le même
Maintenant, si vous ne voulez que le xml comme ci-dessous
Vous devez changer le
String xpathStr = "//Envelope//Header";
àString xpathStr = "//Envelope//Header/*";
la source
Cela vous montre comment
DOM
Nodes
avecXPath
Nodes
.Nous appellerons le code avec la déclaration suivante
Dans notre cas, nous voulons en imprimer à
creatorNames
partir d'unbook.xml
utilisant"//book/creators/creator/creatorName"
comme xpath pour effectuer uneprintNode
action sur chaque nœud qui correspond àXPath
.Code complet
Impressions
Pour
book.xml
la source
En développant l'excellente réponse de @bluish et @Yishai, voici comment vous faites en sorte que les NodeLists et les attributs de nœud prennent en charge les itérateurs, c'est-à-dire l'
for(Node n: nodelist)
interface.Utilisez-le comme:
et
Le code:
la source
Lire le fichier XML à l'aide de XPathFactory
SAXParserFactory
etStAX (JSR-173)
.À l'aide de XPath, obtenez le nœud et ses données enfants.
Document XML
Sortie pour la XPathExpression donnée:
Voir ce lien pour notre propre mise en œuvre de
NamespaceContext
la source