xpath dynamic en xslt?

Tengo el siguiente conjunto de archivos:

SourceFile.xml:

   Atif Bashir 32   

ParamerterSettings.xml

     Lookup1.xml Employees/Employee[@id Employees/Employee[@id='1'] xyz   

Lookup.xml

    HR   

transform.xsl

                   

El resultado debería ser:

     Atif Bashir 32 HR   

Cambié la línea a continuación en Transform.xsl

  

dentro

  

entonces obtengo mi resultado, pero quiero mantener la epresión de XPath para SourceFile.xml y Lookup.xml en ParamerterSettings.xml para que pueda escribir un script más genérico. ¿Se puede hacer esto de otra manera que el xpath dynamic? Cualquier idea o sugerencia para impulsar el mismo será muy apreciada.

    La evaluación dinámica de XPath no es posible en XSLT puro 1.0 o 2.0.

    Hay al menos tres formas de hacer esto en una solución “híbrida” :

    I. Use la función EXSLT dyn:evaluate()

    Desafortunadamente, muy pocos procesadores XSLT 1.0 implementan dyn:evaluate() .

    II. Procese el documento XML con XSLT y genere un nuevo archivo XSLT que contenga las expresiones XPath; luego, ejecute la transformación recién generada .

    Muy pocas personas hacen esto y, en mi opinión, esto es más complejo que la próxima solución.

    III. La forma en que funciona el Visualizador XPath

    La idea es:

    1. Tener una variable global en la hoja de estilos XSLT definida así :

         
    2. A continuación, cargue la hoja de estilo como un documento XML utilizando DOM y reemplace el atributo de select de la variable vExpression con la expresión XPath real que está contenida en el documento XML de origen.

    3. Finalmente, inicie la transformación utilizando la cargada en la memoria y la hoja de estilos xslt actualizada dinámicamente.

    No puede hacerlo en XSLT 2.0, pero podrá hacerlo en la última versión de XSLT:

    http://www.w3.org/TR/xslt-21/#element-evaluate

    Sí, podemos … al menos rudimentariamente. Aquí hay una solución que utilizo con Saxon CE (XSLT 2.0) hasta que la función “evaluar” esté disponible. Tal vez esto no funcione para todo tipo de documentos XML complejos, pero probablemente pueda ajustar el “filtro” que necesite (consulta de atributos, etc.).

    En mi situación especial, tengo expresiones xPath que describen una ruta “completa” a elementos que incluyen sus nombres y el truco es usar un comodín en combinación con solo el último elemento de la expresión dinámica xPath, por ejemplo, usar “tercero” en lugar de “primero / segundo Tercero”:

      

    Para limitar el resultado (seleccionaría todos los elementos con el nombre “tercero”) también tendrá que consultar sobre los antepasados ​​”primero” y “segundo”. Tal vez alguien tenga una idea para simplificar el siguiente código, en particular el llamado de los antepasados:

                            

    En cuanto a mi propósito, solo se devuelve el primer elemento coincidente que no tiene nodos hijo. Probablemente tenga que ajustar esto para sus necesidades específicas.