Frage

Es fällt mir schwer, eine Antwort auf die folgende Frage zu finden, die ziemlich verbreitet erscheint, also muss mir etwas Grundlegendes fehlen. Könnten Sie mir bitte helfen?

Angesichts des erfundenen XML -Schemas, der Probe -XML -Eingabe und der unten stehenden Probe -XSLT, die zur Transformation von XML in HTML verwendet wird. Wie setze ich Attribute in Tags? Zum Beispiel <div id=HouseNumber>,<input type="checkbox" id=Zipcode>, etc?

Notiz: Das Fehlen von Zitaten rund um die Hausnummer und Zipcode sind im Zweck. Ich versuche, den Wert dieser Attribute aus der XML -Eingabe in ID = "", für = "", name = "" usw. zu setzen.

Vielen Dank für Ihre Zeit und geben Sie die erste Version der Frage ein.

bn

Probe XML -Schema

<?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>

Beispiel XML -Eingang:

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

Beispiel 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>

Gewünschte HTML -Ausgabe, wobei das Div -Tag eine ID einer Hausnummer hat:

<div class="houseStyle" id="123">
    <ul>
        <li>California</li>
        <li>Los Angeles County</li>
        <li>Los Angeles</li>
        <li>90210</li>
    </ul>
</div>
War es hilfreich?

Lösung

Es ist nicht klar, was Sie hier wollen. Meinen Sie, dass Sie Ihr Attribut auf das Ergebnis eines XPath -Ausdrucks festlegen möchten (wie Delta)? Wenn ja, sollte dies den Trick machen:

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

Alternativ können Sie verwenden <xsl:element> und <xsl:attribute>, wie andere Antworten beschreiben, obwohl der typische Anwendungsfall dafür ist, wenn Element/Attributname selbst generiert werden muss.

Andere Tipps

Versuchen:

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

Beispiel für ein Anker -Tag:

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

Was ist mit Code unten?


    <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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top