[JAVA] `SAXReader`: Obtenez le fichier xml avec l'espace de noms par défaut défini au format XPath

environnement

pom.xml


<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>

<dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.1.1</version>
</dependency>

Chose que tu veux faire

Je veux obtenir le XML avec l'espace de noms par défaut défini comme ci-dessous au format XPath.

web.xml


<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
  <context-param>
    <param-name>version</param-name>
    <param-value>1.2.3</param-value>
  </context-param>
 </web-apps>

Maintenant, je veux obtenir la valeur «1.2.3» dans l'élément «», qui correspond à la clé «version» dans l'élément «».

Ce que j'ai essayé

Dans le code ci-dessous, un caractère vide a été renvoyé et la valeur «1.2.3» n'a pas pu être obtenue.

Bad.java


 BaseXPath xpath = new Dom4jXPath("//context-param/param-name[text()='version']/following-sibling::param-value");
String version = xpath.stringValueOf(doc); //⇒ Caractères vides

La méthode qui a été réalisée

Vous devez définir vous-même l'espace de noms par défaut.

Good.java


 //Espace de noms par défaut"p"Au préfixe.
BaseXPath xpath = new Dom4jXPath(//p:context-param/p:param-name[text()='version']/following-sibling::p:param-value");
xpath.addNamespace("p", "http://java.sun.com/xml/ns/j2ee");
String version = xpath.stringValueOf(doc); //⇒1.2.3

Site de référence

http://waman.hatenablog.com/entry/20091030/1256858160 http://www.edankert.com/defaultnamespaces.html#What_s_the_Problem_

Recommended Posts

`SAXReader`: Obtenez le fichier xml avec l'espace de noms par défaut défini au format XPath
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
Formater XML en Java
Mettez le fichier dans les propriétés de string avec la configuration spring xml
Remplacez la définition du bean dans le fichier de configuration spring xml par un autre xml
Dans Redmine, vous pouvez obtenir le projet avec Project.find (<identifier>)
Obtenir des attributs et des valeurs à partir d'un fichier XML en Java
[Solution au problème] SAXReader: Comment lire un fichier xml avec un fichier DTD externe spécifié dans un environnement hors ligne
Fixez le nom du fichier de guerre à celui défini dans Maven
Obtenez l'URL publique du fichier privé de Flickr en Java
Comment obtenir la longueur d'un fichier audio avec Java