Inicio Proyectos Librería NRtfTree Documentación NRtfTree Modelo DOM en NRtfTree Búsqueda de nodos en NRtfTree

Búsqueda de nodos en NRtfTree

por sgoliver

Navegar entre nodos de un árbol RTF nos puede ayudar en muchas ocasiones a posicionarnos en un punto concreto del árbol de un documento. Sin embargo, si nuestra intención es localizar un determinado nodo dentro del árbol estos metodos de navegación no nos facilitarán demasiado el trabajo.

Como solución, NRtfTree proporciona una serie de métodos de búsqueda de nodos, que nos permitirán localizar nodos concretos dentro del árbol dado su tipo y/o contenido. Estos métodos de búsuqeda se pueden clasificar según dos criterios distintos.

En primer lugar, podemos agruparlos según el número de nodos que queremos localizar. Así, tendremos dos tipos distintos:

  • Localización del primer nodo que cumpla el criterio de búsqueda.
  • Localización de todos los nodos que cumplan el criterio de búsqueda.

En segundo lugar, también podemos agruparlos según el nivel al que queremos buscar los nodos. Así, distinguimos también dos tipos de búsquedas:

  • Localizar nodos únicamente entre los nodos hijos del nodo actual.
  • Localizar nodos a todos los niveles a partir del nodo actual.

La combinación de estos tipos de búsqueda dan lugar a 4 grupos distintos de métodos en NRtfTree:

//Localiza todos los nodos hijos del nodo actual que cumplen el criterio.
RtfNodeCollection SelectChildNodes(...);

//Localiza todos los nodos a cualquier nivel a partir del nodo actual que
//cumplen el criterio.
RtfNodeCollection SelectNodes(...);

//Localiza el primer nodo hijo del nodo actual que cumple el criterio.
RtfTreeNode SelectSingleChildNode(...);

//Localiza el primer nodo a cualquier nivel a partir del nodo actual que
//cumple el criterio.
RtfTreeNode SelectSingleNode(...);

En cuanto a los criterios de búsqueda, NRtfTree nos permitirá especificar los siguientes datos:

  • Búsqueda de nodos por tipo (los tipos de nodo se definen en la clase RtfNodeType).
  • Búsqueda de nodos por palabra clave.
  • Búsqueda de nodos por palabra clave y valor del parámetro.

De esta forma, para cada uno de los cuatro tipos de búsqueda presentados, se podrá indicar cualquiera de estos tres criterios, de forma que tendremos un total de 12 métodos distintos de búsqueda de nodos dentro de un árbol RTF. Así, por ejemplo, podríamos realizar las siguientes búsquedas:

//Localizar todos los nodos a cualquier nivel a partir del nodo
//actual que cumplen el siguiente criterio de búsqueda:
//* Palabra de control = "\b"

RtfNodeCollection encontrados = nodo.SelectNodes("b");

//Localizar todos los nodos hijos del nodo actual que cumplen el
//siguiente criterio de búsqueda:
//* Palabra de control = "\cf"
//* Parámetro = "3"

RtfNodeCollection encontrados = nodo.SelectChildNodes("cf", 3);

//Localizar el primer nodo hijo del nodo actual que cumplen el
//siguiente criterio de búsqueda:
//* Tipo de nodo = Texto

RtfTreeNode encontrado = nodo.SelectSingleChildNode(RtfNodeType.TEXT);

Además de los métodos ya presentados, debemos indicar que los nodos de tipo grupo presentan una casuística especial. En muchas ocasiones, la primera palabra de control incluida en un grupo RTF indica el propósito de dicho grupo. Por ejemplo, el grupo RTF que define la tabla de colores del documento comienza siempre por la palabla de control «\colortlb». Por tanto, es interesante disponer de métodos específicos para buscar nodos de tipo grupo indicando como criterio cuál es la primera palabra de control que debe contener. Para ello, NRtfTree proporciona los siguientes métodos, análogos a los ya comentados:

//Localiza todos los grupos hijos del nodo actual que cumplen el criterio.
RtfNodeCollection SelectChildGroups(string firstKeyword);

//Localiza todos los grupos a cualquier nivel a partir del nodo actual que
//cumplen el criterio.
RtfNodeCollection SelectGroups(string firstKeyword);

//Localiza el primer grupo hijo del nodo actual que cumple el criterio.
RtfTreeNode SelectSingleChildGroup(string firstKeyword);

//Localiza el primer grupo a cualquier nivel a partir del nodo actual que
//cumple el criterio.
RtfTreeNode SelectSingleGroup(string firstKeyword);

Uniendo la funcionalidad de las propiedades de navegación comentadas en el apartado anterior a las muchas posibilidades de los métodos de búsqueda presentados, posicionarnos en un punto concreto de un árbol RTF debería ser tan sencillo como escribir un par de líneas de código.

Dejar un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. Aceptar Más Información

Política de Privacidad y Cookies