Pregunta de XSLT simple: Configuración de valores de atributo de nodo HTML interno como

StackOverflow https://stackoverflow.com/questions/1527042

  •  20-09-2019
  •  | 
  •  

Pregunta

Me está costando encontrar una respuesta a la siguiente pregunta, lo que parece bastante común, por lo que debo perder algo fundamental. ¿Podrías ayudarme?

Dado el esquema XML artificial, la entrada XML de muestra y la muestra XSLT a continuación se usa para transformar XML en HTML. ¿Cómo configuro los atributos dentro de las etiquetas? Por ejemplo <div id=HouseNumber>,<input type="checkbox" id=Zipcode>, ¿etc?

Nota: La falta de citas alrededor de Housenumber y ZipCode están en propósito. Estoy tratando de poner el valor de estos atributos de la entrada XML en id = "", for = "", name = "", etc.

Gracias por su tiempo e ingrese la primera versión de la pregunta.

bn

Esquema XML de muestra

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema elementFormDefault="qualified"  xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Location">
        <xs:complexType>
            <xs:attribute name="State" type="xs:string" use="required" />
            <xs:attribute name="County" type="xs:string" use="required" />
            <xs:attribute name="City" type="xs:string" use="required" />
            <xs:attribute name="Zipcode" type="xs:nonNegativeInteger" use="required" />
            <xs:attribute name="HouseNumber" type="xs:nonNegativeInteger" use="required" />
        </xs:complexType>
    </xs:element>
</xs:schema>

Entrada de XML de muestra:

<Location>
    <State>California</State>
    <County>Los Angeles County</County>
    <City>Los Angeles</City>
    <Zipcode>90210</Zipcode>
    <HouseNumber>123</HouseNumber>
</Location>

Muestra xslt:

   <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="/">
    <xsl:for-each select="Location">
        <!--Inner HTML example, div has no id-->
        <div class="houseStyle">
            <ul>
                <li><xsl:value-of select="Location/State"/></li>
                <li><xsl:value-of select="Location/County"/></li>
                <li><xsl:value-of select="Location/City"/></li>
                <li><xsl:value-of select="Location/Zipcode"/></li>
            </ul>
        </div>
        <!--Inner HTML example again, but how do I
            set the div id to HouseNumber?-->
        <div class="houseStyle" id=HouseNumber>
            <ul>
                <li><xsl:value-of select="Location/State"/></li>
                <li><xsl:value-of select="Location/County"/></li>
                <li><xsl:value-of select="Location/City"/></li>
                <li><xsl:value-of select="Location/Zipcode"/></li>
            </ul>
        </div>
    </xsl:for-each>
</xsl:stylesheet>

Salida HTML deseada, donde la etiqueta Div tiene una ID de número de casa:

<div class="houseStyle" id="123">
    <ul>
        <li>California</li>
        <li>Los Angeles County</li>
        <li>Los Angeles</li>
        <li>90210</li>
    </ul>
</div>
¿Fue útil?

Solución

No está claro lo que quieres aquí. ¿Quiere decir que desea establecer su atributo al resultado de alguna expresión de XPath (como Delta)? Si es así, esto debería hacer el truco:

<div class="stylishClass" id="{Delta}">

Alternativamente, puede usar <xsl:element> y <xsl:attribute>, como describen otras respuestas, aunque el caso de uso típico para eso es cuando el nombre del elemento/atributo en sí mismo debe generarse.

Otros consejos

Probar:

<xsl:element name="div">
        <xsl:attribute name="class">stylishClass</xsl:attribute>
        <xsl:attribute name="id"><xsl:value-of select="Delta"/></xsl:attribute>  
 </xsl:element>

Ejemplo para una etiqueta de anclaje:

<xsl:element name="a">
      <xsl:attribute name="href">http://example.com</xsl:attribute>            
      <xsl:text>My Link Text</xsl:text>
</xsl:element>

¿Qué pasa con el código a continuación?


    <xsl:element name="div">
        <xsl:attribute name="class">stylishClass</xsl:attribute>
        <xsl:attribute name="id"><xsl:value-of select="Delta"/></xsl:attribute>
    </xsl:element>

Hth

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top