Estoy utilizando la siguiente consulta XPath para buscar el nombre del autor de un libro y devolver el nombre del libro cuando coincide con el autor.

String rawXPath = String.format("//book[author= '%s']/bookname/text()", authorBook);  

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr 
 = xpath.compile(rawXPath);

Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
    System.out.println(nodes.item(i).getNodeValue()); 
}

cómo modificar la búsqueda de modo que puedo buscar en el contenido …../el contenido de(nombre de nodo) para una palabra específica.

Ejemplo: String dentro del xml el contenido de la variable: «Este libro contiene la gloria y la historia de nuestros antepasados. Y el impacto de ella en nuestra vida diaria es inmenso.»

Ahora quiero buscar la palabra «diario». Si coincide con diario va a devolver a mí el nombre del libro/autor nombre watever que quiere el usuario.

Gracias

  • Buena pregunta, +1. Ver mi respuesta para un simple XPath de una línea de expresión y su explicación.
InformationsquelleAutor JavaBits | 2011-04-15

4 Comentarios

  1. 2

    Utilizar el contains() función Xpath.

    //book[contains(content, '%s')]/bookname

    dependiendo un poco de la estructura XML de entrada

  2. 1

    Desea:

    //book[contains(content, $searchString)
         and
           author = $wantedAuthor
          ]
           /bookname/text()

    De esta forma se selecciona el text() nodos que son hijos de la bookname elemento que es un niño de cualquier book elemento en el documento, el valor de cadena de cuyo content niño contiene la cadena (contenido en) $searchString y la cadena de valor de cuya author elemento es el mismo que el (cadena contenida en) $wantedAuthor variable

    En esta expresión Xpath las variables deben ser sustituidos por cadenas específicas. También, se supone que el elemento content es un niño de book.

    No sé Java, pero supongo que el final de código Java wil el siguiente aspecto:

    String.format("//book[contains(content, '%s') 
                        and 
                         author= '%s']/bookname/text()", 
                  searchString, authorBook);   
  3. 0

    si el xml que se parece a esto:

     <book>
       <author> Author Name </author>
       <description> This book contains the glory and history of our forefathers. And the impact of it in our daily life is immense.</description>
     </book>

    entonces usted puede intentar:

    String rawXPath = "//book//*[contains(text(),\"daily\")]";

    que significa «dar a cualquier elemento de libro que cualquier niño sostiene un texto que contiene la palabra ‘día a día’.

    Espero que se de ayuda! saludos!

  4. 0

    Ahora si u desea buscar también algún término que está dentro de un nodo u puede hacer algo como esto –

    String rawXPath = String.format("//book/title[contains(innerItem, '%s')]/type/text()", value);

    Agregar una barra diagonal inversa para cada nodo y el nombre de nodo y la ur.

Dejar respuesta

Please enter your comment!
Please enter your name here