Source: https://www.experts-exchange.com/questions/28246460/Search-for-word-or-phrase-in-XML-generating-highlighted-text-using-XSLT.html
Timestamp: 2018-09-18 21:47:21+00:00

Document:
[SOLUTION] Search for word or phrase in XML generating highlighted text using XSLT
Search for word or phrase in XML generating highlighted text using XSLT
Hello, I need to search for a word or phrase inside an XML document and generate an HTML result page. I don't know if I can do this using XSLT or some other technology. I'm using PHP v5.2.17.
This is a sample of my XML:
<impuesto>
&#9;<titulo>Renta del Pequeño Contribuyente</titulo>
&#9;<ley_articulo>
&#9;&#9;<titulo>Ley 2421/04</titulo>
&#9;&#9;<contenido>
&#9;&#9;&#9;<p>Concordada con los Decretos Nº 8.593/06 , decreto 5610/10 y la Res. Nº 44/10 Art. con su anexo A y B</p>
&#9;&#9;&#9;<p><strong>Definiciones y Conceptos</strong></p>
&#9;&#9;&#9;<decreto>
&#9;&#9;&#9;&#9;<titulo>Decreto Nº 8.593/06</titulo>
&#9;&#9;&#9;&#9;<contenido>
&#9;&#9;&#9;&#9;&#9;<p><strong>Artículo 1º - Conceptos</strong> Para la aplicación del Impuesto a la Renta del Pequeño Contribuyente se tendrán en cuenta los conceptos, &#9;definiciones y aclaraciones indicadas en este artículo:</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>a) Administración o Administración Tributaria:</strong> La Subsecretaría de Estado de Tributación del Ministerio de Hacienda, creada por Ley Nº 109/91 y sus modificaciones.</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>b) Cese o clausura de actividades o cierre definitivo de negocios:</strong> Proceso formal mediante el cual concluyen definitivamente las actividades económicas de un Contribuyente afectadas al presente Impuesto. Este concepto no incluye a la "clausura" como sanción, establecida por el Artículo 174 de la ley; tampoco incluye la suspensión temporal de actividades del negocio, entendiéndose temporal hasta que se presente a la Administración Tributaria la Declaración Jurada de Cierre a que se refiere el Artículo 14 "Cese o Clausura de Actividades" de este Decreto.</p>
&#9;&#9;&#9;&#9;</contenido>
&#9;&#9;&#9;</decreto>
&#9;&#9;&#9;&#9;<titulo>Decreto Nº 5.697/10</titulo>
&#9;&#9;&#9;&#9;&#9;<p>Modificase el literal c) del Artículo 1º del Decreto Nº 8593/2006, el cual queda redactado de la siguiente manera:</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>c) Comprobante de Venta:</strong> Documento autorizado por la Administración Tributaria  para respaldar actos de compra, venta, contrataciones y prestaciones de servicios. Su timbrado, uso y documentos complementarios se rigen por el Decreto Nº 6539/2005 y sus normas modificatorias y complementarias".</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>d) Empresa Unipersonal:</strong> Toda unidad productiva perteneciente a una persona física, en la que se utilice en forma conjunta el capital y el trabajo, propios o ajenos, en cualquier proporción, con el objeto de obtener un resultado económico, con excepción de los servicios de carácter personal.</p>
&#9;&#9;&#9;&#9;&#9;<p>A los fines del Impuesto, las empresas individuales de responsabilidad limitada, los condominios de personas físicas y las sucesiones indivisas son consideradas empresas unipersonales.</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>e) Impuesto o IRPC:</strong> Impuesto a la Renta del Pequeño Contribuyente.</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>f) Ley:</strong> La Ley Nº 125/91, con sus modificaciones.</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>g) Servicio de carácter personal:</strong> Aquel para cuya realización es preponderante la utilización del factor trabajo.</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>h) Servicio no personal:</strong> Aquel para cuya realización es necesaria la utilización conjunta del capital y del trabajo en cualquier proporción o aquél en cuya realización se utiliza de forma exclusiva el factor capital.</p>
&#9;&#9;&#9;<resolucion>
&#9;&#9;&#9;&#9;<titulo>Resolución Nº 1560/06</titulo>
&#9;&#9;&#9;&#9;&#9;<p><strong>Artículo 1º - Conceptos</strong>  Para la aplicación de la presente Resolución se tendrán en cuenta los conceptos, definiciones y aclaraciones indicadas en este artículo:</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>a) Administración o Administración Tributaria:</strong> La Subsecretaria de Estado de Tributación del Ministerio de Hacienda, creada por Ley Nº 109/91 y sus modificaciones.</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>b) Impuesto o IRPC:</strong> Impuesto a la Renta del Pequeño Contribuyente.</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>c) Ley:</strong> La Ley Nº 125/91, con sus modificaciones. </p>
&#9;&#9;&#9;&#9;&#9;<p><strong>d) Decreto:</strong> El Decreto Nº 8593 de fecha 11 de diciembre de 2006.</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>e) IRACIS:</strong> Impuesto a la Renta Comercial, Industrial o de Servicios.</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>f) IVA:</strong> Impuesto al Valor Agregado</p>
&#9;&#9;&#9;</resolucion>
&#9;&#9;&#9;&#9;<titulo>Resolución Nº 44/10Art.  1º.-</titulo>
&#9;&#9;&#9;&#9;&#9;<p>Modifícase el literal g) del Artículo 1º de la Resolución Nº 1560/06, que quedará redactado del siguiente modo:</p>
&#9;&#9;&#9;&#9;&#9;<p><strong>g) Comprobantes:</strong> Las facturas, Boletas de Ventas, Tickets, Autofacturas y demás documentos previstos en el Decreto N° 6539/05 y sus normas modificatorias y  complementarias.".</p>
&#9;&#9;</contenido>
&#9;</ley_articulo>&#9;&#9;
&#9;&#9;<titulo>Artículo 42 - Primer Párrafo</titulo>
&#9;&#9;&#9;<p><strong>Hecho Generador:</strong> El Impuesto a la Renta del Pequeño Contribuyente Gravará los ingresos provenientes de la realización de actividades comerciales, industriales o de servicio que no sean de carácter personal.</p>
&#9;&#9;&#9;&#9;&#9;<p>Artículo 2º - Objeto: El Impuesto grava los ingresos de fuente paraguaya provenientes de la realización de actividades comerciales, industriales o de servicios que no sean de carácter personal, obtenidos por los sujetos pasivos definidos en el Artículo 3º del presente Reglamento.</p>
&#9;</ley_articulo>
</impuesto>
And the generated HTML should show the "impuesto", the "articulo" and the paragraph "p" or "titulo" where the searched text is contained, highlighting it:
(Search word: "scelerisque")
&#9;<thead>
&#9;&#9;<tr>
&#9;&#9;&#9;<th colspan="3">Resultados de la b&uacute;squeda</th>
&#9;&#9;</tr>
&#9;</thead>
&#9;<tbody>
&#9;&#9;&#9;<td width="100"><a href="#">IVA</a></td>
&#9;&#9;&#9;<td width="100"><a href="#">Art&iacute;culo 1</a></td>
&#9;&#9;&#9;<td>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus <span class="highlighted">scelerisque</span> ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</td>
&#9;&#9;&#9;<td><a href="#">IVA</a></td>
&#9;&#9;&#9;<td><a href="#">Art&iacute;culo 3</a></td>
&#9;&#9;&#9;<td><a href="#">IMAGRO</a></td>
&#9;&#9;&#9;<td><a href="#">Art&iacute;culo 2</a></td>
&#9;</tbody>
How can I accomplished this? Thanks.
https://www.experts-exchange.com/questions/28246460/Search-for-word-or-phrase-in-XML-generating-highlighted-text-using-XSLT.html copy
ivanblueAsked: 2013-09-22
Ray PaseurCommented: 2013-09-22
Couple of issues here. First, you need to upgrade your version of PHP. PHP 5.2 is not supported any more, not even for security fixes. Second you might want to have some test data that contained positive results. The sample search string is not in the XML document posted here.
<?php // RAY_temp_ivanblue.php
// SEE http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_28246460.html
$word = "scelerisque";
<titulo>Renta del Pequeño Contribuyente</titulo>
<ley_articulo>
<titulo>Ley 2421/04</titulo>
<contenido>
<p>Concordada con los Decretos Nº 8.593/06 , decreto 5610/10 y la Res. Nº 44/10 Art. con su anexo A y B</p>
<p><strong>Definiciones y Conceptos</strong></p>
<decreto>
<titulo>Decreto Nº 8.593/06</titulo>
<p><strong>Artículo 1º - Conceptos</strong> Para la aplicación del Impuesto a la Renta del Pequeño Contribuyente se tendrán en cuenta los conceptos, 	definiciones y aclaraciones indicadas en este artículo:</p>
<p><strong>a) Administración o Administración Tributaria:</strong> La Subsecretaría de Estado de Tributación del Ministerio de Hacienda, creada por Ley Nº 109/91 y sus modificaciones.</p>
<p><strong>b) Cese o clausura de actividades o cierre definitivo de negocios:</strong> Proceso formal mediante el cual concluyen definitivamente las actividades económicas de un Contribuyente afectadas al presente Impuesto. Este concepto no incluye a la "clausura" como sanción, establecida por el Artículo 174 de la ley; tampoco incluye la suspensión temporal de actividades del negocio, entendiéndose temporal hasta que se presente a la Administración Tributaria la Declaración Jurada de Cierre a que se refiere el Artículo 14 "Cese o Clausura de Actividades" de este Decreto.</p>
</contenido>
</decreto>
<titulo>Decreto Nº 5.697/10</titulo>
<p>Modificase el literal c) del Artículo 1º del Decreto Nº 8593/2006, el cual queda redactado de la siguiente manera:</p>
<p><strong>c) Comprobante de Venta:</strong> Documento autorizado por la Administración Tributaria  para respaldar actos de compra, venta, contrataciones y prestaciones de servicios. Su timbrado, uso y documentos complementarios se rigen por el Decreto Nº 6539/2005 y sus normas modificatorias y complementarias".</p>
<p><strong>d) Empresa Unipersonal:</strong> Toda unidad productiva perteneciente a una persona física, en la que se utilice en forma conjunta el capital y el trabajo, propios o ajenos, en cualquier proporción, con el objeto de obtener un resultado económico, con excepción de los servicios de carácter personal.</p>
<p>A los fines del Impuesto, las empresas individuales de responsabilidad limitada, los condominios de personas físicas y las sucesiones indivisas son consideradas empresas unipersonales.</p>
<p><strong>e) Impuesto o IRPC:</strong> Impuesto a la Renta del Pequeño Contribuyente.</p>
<p><strong>f) Ley:</strong> La Ley Nº 125/91, con sus modificaciones.</p>
<p><strong>g) Servicio de carácter personal:</strong> Aquel para cuya realización es preponderante la utilización del factor trabajo.</p>
<p><strong>h) Servicio no personal:</strong> Aquel para cuya realización es necesaria la utilización conjunta del capital y del trabajo en cualquier proporción o aquél en cuya realización se utiliza de forma exclusiva el factor capital.</p>
<resolucion>
<titulo>Resolución Nº 1560/06</titulo>
<p><strong>Artículo 1º - Conceptos</strong>  Para la aplicación de la presente Resolución se tendrán en cuenta los conceptos, definiciones y aclaraciones indicadas en este artículo:</p>
<p><strong>a) Administración o Administración Tributaria:</strong> La Subsecretaria de Estado de Tributación del Ministerio de Hacienda, creada por Ley Nº 109/91 y sus modificaciones.</p>
<p><strong>b) Impuesto o IRPC:</strong> Impuesto a la Renta del Pequeño Contribuyente.</p>
<p><strong>c) Ley:</strong> La Ley Nº 125/91, con sus modificaciones. </p>
<p><strong>d) Decreto:</strong> El Decreto Nº 8593 de fecha 11 de diciembre de 2006.</p>
<p><strong>e) IRACIS:</strong> Impuesto a la Renta Comercial, Industrial o de Servicios.</p>
<p><strong>f) IVA:</strong> Impuesto al Valor Agregado</p>
</resolucion>
<titulo>Resolución Nº 44/10Art.  1º.-</titulo>
<p>Modifícase el literal g) del Artículo 1º de la Resolución Nº 1560/06, que quedará redactado del siguiente modo:</p>
<p><strong>g) Comprobantes:</strong> Las facturas, Boletas de Ventas, Tickets, Autofacturas y demás documentos previstos en el Decreto N° 6539/05 y sus normas modificatorias y  complementarias.".</p>
</ley_articulo>
<titulo>Artículo 42 - Primer Párrafo</titulo>
<p><strong>Hecho Generador:</strong> El Impuesto a la Renta del Pequeño Contribuyente Gravará los ingresos provenientes de la realización de actividades comerciales, industriales o de servicio que no sean de carácter personal.</p>
<p>Artículo 2º - Objeto: El Impuesto grava los ingresos de fuente paraguaya provenientes de la realización de actividades comerciales, industriales o de servicios que no sean de carácter personal, obtenidos por los sujetos pasivos definidos en el Artículo 3º del presente Reglamento.</p>
// MAKE AN OBJECT
// SEE IF THE WORD IS ANYWHERE? (NOPE)
$poz = strpos($xml, $word);
var_dump($poz);
ivanblueAuthor Commented: 2013-09-22
Hello, I'll see what I can do about the PHP version. With respect to the code this is the positive result example:
<id>irpc</id>
The result searching for the word "impuesto" should be:
<th colspan="3">Resultados de la b&uacute;squeda</th>
<td width="100"><a href="#">IRCP</a></td>
<td width="100"><a href="#">Ley 2421/04</a></td>
<a href="#">Decreto Nº 8.593/06</a>
<td><a href="#">irpc</a></td>
<td><a href="#">Ley 2421/04</a></td>
<td><a href="#">Artículo 42 - Primer Párrafo</a></td>
I read this could be achievable using XPath instead of XSLT.
Kyle HamiltonData ScientistCommented: 2013-09-29
if all you're doind us parsing the xml document, then you dont need xslt or xpath.
php has a funtion 'simpleXMLelement' which would what you need. have a look here
http://www.sitepoint.com/parsing-xml-with-simplexml/
Hmm... Don't know how I got disconnected from this question, but I just got a neglected question alert about it! Here are some notes.
The XML document says it is in ISO-8859-1, but I got invalid characters when I tried to display the object made from the XML, and I had to use UTF-8 to get it to look right. This article explains a bit more about character-set collisions, and how to avoid them
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_11880-Unicode-PHP-and-Character-Collisions.html
This is not a complete solution; you may need some other inner iterators to find all of the parts of the object. But it will show the way forward.
http://www.laprbass.com/RAY_temp_ivanblue.php
// MAKE AN OBJECT FROM THE XML
// ENSURE THAT THE BROWSER HAS THE RIGHT CHARACTER ENCODING
echo '<meta charset="utf-8" />';
// MAKE THE OUTPUT EASY TO READ
// ACTIVATE THIS TO SHOW THE OBJECT
// var_dump($obj);
// SHOW HOW TO USE ITERATORS ON THE OBJECT
foreach ($obj->contenido->ley_articulo as $x)
// CAPTURE A VARIABLE CAST TO STRING TYPE
$t = (string)$x->titulo;
// ITERATE OVER THE INNER CONTENT OF THE OBJECT
foreach ($x->contenido->decreto as $cd)
// ITERATE OVER THE PARAGRAPHS
foreach ($cd->contenido->p as $p)
// LOOK INTO THE STRINGS FOR SIGNAL STRING "IMPUESTO"
$o = NULL;
$p = (string)$p;
if (stripos($p, 'IMPUESTO') !== FALSE)
$o .= PHP_EOL . $p;
// IF SIGNAL STRING IS FOUND
if ($o)
echo PHP_EOL . "<b>$t</b>" . $o;

References: Artículo 174
 Artículo 14
 Artículo 1
 Resolución 
 Artículo 1
 Resolución 
 Artículo 3
 Artículo 174
 Artículo 14
 Artículo 1
 Resolución 
 Artículo 1
 Resolución 
 Artículo 3