Jue Jun 19, 2008 4:18 am
|
|
|
| XPath |
|
|
Hola a todos:
Estoy leyendo un documento en XML (parseado con LibXML), y tengo algún problemilla con XPath.
Suponiendo que una muestra del doc XML que tengo es:
| HTML: | <?xml version="1.0" encoding="iso-8859-1"?>
<tokens>
<w id="w1" tokentype="HAS_MAI">
<forma>Baina</forma>
<anbtal talde_zenb="13">
<tamaina>002</tamaina>
</anbtal>
</w>
<w id="w2">
...
</w>
</tokens>
|
Hago:
| Perl: | use XML:: LibXML;
use strict;
my $parser = XML:: LibXML-> new();
$parser-> keep_blanks(0);
my $doc = $parser-> parse_file("/home/file.xml");
my $root = $doc-> getDocumentElement();
for (my $i = 1; $i < 100; $i ++ ){
my $iden_00 = "w". "$i";
foreach my $word ($root-> findnodes('//w[@id="$iden_00"]')){
foreach my $anbtal ($word-> findnodes("anbtal")){
$talde_zenb_00 = $anbtal-> getAttribute("talde_zenb");
$tamaina_00 = $anbtal-> findnodes("tamaina");
}
}
} |
Y no me lee $talde_zen_00 ni $tamaina_00. Lo curioso es que en la parte de XPath, si pongo, por ejemplo "w3" en vez de la variable "$iden_00":
foreach my $word ($root->findnodes('//w[@id="w3"]')){
...
Sí que lee. No sé si la cuestión está en las comillas...
Gracias como siempre,
Xagutxu |
|
|
|

Jue Jun 19, 2008 4:56 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
|
|
|
|
|
Sí, pueden ser las comillas. Las comillas simples impiden la expansión de las variables que existan dentro.
Cambia
'//w[@id="$iden_00"]' por
'//w[@id="' . $iden_00 . '"]' o por
"//w[\@id=\"$iden_00\"]" o por
"//w[\@id='$iden_00']".
Como ves, la dificultad está en que además de la variable $ident_00, Perl puede pensar que @id es otra variable, por lo que no podemos hacer una expansión normal.
Yo elegiría la opción de concatenación con el operador '.'. |
|
Jue Jun 19, 2008 7:00 am
|
|
|
|
|
|
¡¡¡Muchas gracias!!!
No sé qué haría sin vosotros...
Xagutxu |
|
Jue Jun 19, 2008 12:45 pm
|
|
|
| y para el @id? |
|
|
¿Y si lo que quiero es sustituir el @id por una variable, cómo se haría?
| Perl: | foreach my $word ($root->findnodes("//w[@id=\"$iden_00\"]")){
...
} |
Poniendo, igualmente:
| Perl: | foreach my $word ($root->findnodes("//w[@\"id\"=\"$iden_00\"]")){
...
} |
No funciona...
Gracias,
Xagutxu |
|
Jue Jun 19, 2008 12:56 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
|
|
|
|
|
| "//w[\@$id=\"$iden_00\"]", siendo $id el valor de id. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|