es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo concatenar el valor de una variable a un xpath en XSLT.

Tengo un requisito para obtener los valores concatenando el valor de una variable al xpath.
Aquí está mi archivo XML.

<ns1:productSpecificationComponent>
    <ns1:name>ABC</ns1:name>
    <ns1:numberInParent>1</ns1:numberInParent>
</ns1:productSpecificationComponent>
<ns1:productSpecificationComponent>
    <ns1:name>DEF</ns1:name>
    <ns1:numberInParent>1</ns1:numberInParent>
</ns1:productSpecificationComponent>
.
.
.
<ns1:specificationSectionDetail>
<ns1:name>ABC</ns1:name>
<ns1:mainProductTitle>
        <![CDATA[ABC]]>
</ns1:mainProductTitle>
</ns1:specificationSectionDetail>.
.
.
<ns1:specificationSectionDetail>
<ns1:name>DEF</ns1:name>
<ns1:mainProductTitle>
        <![CDATA[DEF]]>
</ns1:mainProductTitle>
</ns1:specificationSectionDetail>

Estoy intentando iterar a través de cada una de las componentes de especificación del producto y obtener el valor del elemento para almacenarlo en una variable.
Usando el valor de la variable, necesito encontrar el valor de para ese valor almacenado en la variable.

Mi archivo XSL se ve así:

<xsl:for-each select="/ns1:productSpecificationFullDTO/ns1:productSpecificationComponent/ns1:parent[text() != 'true']/../ns1:name[text() != 'Parent']/..">
    <xsl:variable name="subItem" select="ns1:name/text()"/>
        <Item>
                <LongDescription>
                    <xsl:value-of select="concat('ns1:productSpecificationFullDTO/ns1:specificationSectionDetail/ns1:name[text() = ''' , $subItem , ''']../ns1:specificationSectionFoodOtherLabellingCopySection/ns1:mainProductTitle/text()')"/>
                </LongDescription>
        </Item>

La salida que obtengo no es la esperada, ya que solo devuelve el nombre de la ruta y no el valor.

<Item> 
<LongDescription>ns1:productSpecificationFullDTO/ns1:specificationSectionDetail/ns1:name[text() = 'ABC']/ns1:specificationSectionFoodOtherLabellingCopySection/ns1:mainProductTitle/text()
</LongDescription> 

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el valor concatenando el valor de una variable al XPath, puede modificar su archivo XSL de la siguiente manera:

    <xsl:for-each select="/ns1:productSpecificationFullDTO/ns1:productSpecificationComponent/ns1:parent[text() != 'true']/../ns1:name[text() != 'Parent']/..">
        <xsl:variable name="subItem" select="ns1:name/text()"></xsl:variable>
        <item>
            <longdescription>
                <xsl:value-of select="/ns1:productSpecificationFullDTO/ns1:specificationSectionDetail/ns1:name[text() = $subItem]/../ns1:mainProductTitle/text()"></xsl:value-of>
            </longdescription>
        </item>
    </xsl:for-each>
    

    Aquí, puede usar la variable $subItem para filtrar el elemento ns1:name en la expresión XPath dentro del elemento value-of. Además, utilice la ruta absoluta (comenzando desde el elemento raíz) para referirse al elemento ns1:specificationSectionDetail. Esto debería darle el resultado deseado.

Comments are closed.