Una forma de testear rápidamente una expresion XPath y nuestro XML es usando un Tester, en Internet hay varios, por ejemplo: https://codebeautify.org/Xpath-Tester.
Supongamos que tenemos este XML.
La expresión:
string(/CATALOG/CD/TITLE)
Nos retornará Empire Burlesque.
Esto funciona sin problemas en Nifi. Podemos configurar como destino de nuestras extracciones a los atributos del Flowfile.
Esto es en un caso simple de XML, pero los XML de la vida real, normalmente tiene encabezados con XSLT, Namespaces, y demas detalles y complejidades. Lo cual, puede que no funcione tan fácilmente porque va a necesitar del XSLT o del namespace.
Por ejemplo, si tenemos un XML complejo como el de la imagen siguiente:
Sobre este ejemplo, si quisieramos extraer el valor del beginTime dentro del tag de measCollect, tecnimcamente deberiamos hacer
string(/measCollectFile/fileHeader/measCollect/@beginTime)
Pero quizás no funcione, porque tenemos un namespace en este XML, por lo que, el truco aqui, es buscar el tag que necesitamos sin tener en cuenta el camino hacia el elemento.
Para ello, podemos hacer:
string(//*[local-name()='measCollect']/@beginTime)
Marcamos que no queremos validar el DTD del XML, y usamos como retorno de la expresion un String o Number, segun sepamos.

En el caso de la imagen, estamos buscando un elemento dentro del XML que se llama measCollect, sin importar en que lugar este dentro del XML, y nos vamos a quedar con el valor de un atributo de ese tag llamado beginTime y luego con un segundo, llamado endTime.
Si luego inspeccionamos los elementos de salida, deberiamos ver nuestras extracciones como atributos del FlowFile.
No hay comentarios.:
Publicar un comentario