XPath dinámico para filtrar documentos XML utilizando XSLT
He estado buscando en StackOverflow durante un tiempo pero sin éxito. Mi objetivo es filtrar documentos XML de empleados. El XML de entrada tiene alrededor de 9000 empleados, y tengo varios sistemas de destino que desean un subconjunto de estos registros de empleados basados en diferentes criterios de selección para cada sistema de destino.
Entrada de muestra:
<employees>
<employee>
<id>1</id>
<name>Name1</name>
</employee>
<employee>
<id>2</id>
<name>Name2</name>
</employee>
<employee>
<id>3</id>
<name>Name3</name>
</employee>
<employee>
<id>4</id>
<name>Name4</name>
</employee>
</employees>
La salida debe tener la misma estructura pero reducir los nodos
¿Cómo puedo pasar el XPath dinámico a una hoja de estilo XSLT y obtener los empleados filtrados como salida? Por favor, tenga en cuenta que la expresión Xpath completa junto con las condiciones de filtrado se pasan como una cadena.
Salida deseada:
<employees>
<employee>
<id>2</id>
<name>Name2</name>
</employee>
<employee>
<id>3</id>
<name>Name3</name>
</employee>
</employees>
davy.ai
Para pasar una expresión XPath dinámica a una hoja de estilo XSLT y obtener los empleados filtrados como resultado, puedes utilizar el atributo “select” del elemento “xsl:apply-templates” en la hoja de estilo XSLT.
Primero, debes recibir la expresión XPath dinámica como parámetro en la hoja de estilo XSLT. Esto se puede hacer utilizando el elemento “xsl:param”.
Aquí hay un ejemplo de hoja de estilo XSLT que toma la expresión XPath dinámica como parámetro y filtra los empleados en consecuencia:
Para utilizar esta hoja de estilo, debes pasar la expresión XPath dinámica como parámetro al ejecutar la transformación XSLT. Aquí hay un ejemplo de entrada XML y cómo ejecutar la transformación utilizando la expresión XPath dinámica “//Employee[id > 1]”:
El resultado de esta transformación sería:
Este resultado coincide con el resultado deseado especificado en la pregunta.