Pertanyaan XSLT Sederhana: menyetel nilai atribut simpul HTML bagian dalam seperti ‹div id=something›

Saya kesulitan menemukan jawaban atas pertanyaan berikut, yang tampaknya cukup umum, jadi saya pasti melewatkan sesuatu yang mendasar. Bisakah Anda membantu saya?

Mengingat skema XML yang dibuat, contoh input XML, dan contoh XSLT di bawah ini digunakan untuk mengubah XML menjadi HTML. Bagaimana cara menetapkan atribut dalam tag? Misalnya <div id=HouseNumber>,<input type="checkbox" id=Zipcode>, dst?

Catatan: Kurangnya tanda kutip di sekitar HouseNumber dan Kode Pos memang disengaja. Saya mencoba memasukkan nilai atribut ini dari input XML ke id="", for="", name="", dll.

Terima kasih atas waktunya, dan masukan pada pertanyaan versi pertama.

bn

Contoh Skema XML

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

Contoh Masukan XML:

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

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

Output HTML yang diinginkan, dengan tag div memiliki id nomor rumah:

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

person bn.    schedule 06.10.2009    source sumber
comment
Akan sangat membantu jika Anda dapat memposting beberapa contoh masukan XML dan seperti apa keluaran yang Anda harapkan.   -  person Jim Garrison    schedule 06.10.2009
comment
Panggilan bagus Jim, saya harus memposting contoh yang sudah dibersihkan, tapi saya akan mencoba membuatnya tidak terlalu tumpul.   -  person bn.    schedule 06.10.2009


Jawaban (3)


Tidak jelas apa yang Anda inginkan di sini. Apakah maksud Anda Anda ingin menyetel atribut Anda ke hasil beberapa ekspresi XPath (seperti Delta)? Jika ya, ini akan berhasil:

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

Alternatifnya, Anda dapat menggunakan <xsl:element> dan <xsl:attribute>, seperti yang dijelaskan oleh jawaban lain, meskipun kasus penggunaan yang umum adalah ketika nama elemen/atribut itu sendiri harus dibuat.

person Pavel Minaev    schedule 06.10.2009
comment
Terima kasih banyak ini bekerja dengan sangat baik. Terima kasih juga atas pendekatan alternatif dan alasan di baliknya. - person bn.; 07.10.2009

Mencoba:

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

Contoh untuk tag jangkar:

<xsl:element name="a">
      <xsl:attribute name="href">http://example.com</xsl:attribute>            
      <xsl:text>My Link Text</xsl:text>
</xsl:element>
person Mike Marshall    schedule 06.10.2009
comment
Terima kasih, ini juga berhasil, jawaban Anda diterima bersamaan dengan jawaban Rubens Farias, tetapi Anda berdua membantu saya, terima kasih! - person bn.; 07.10.2009

Bagaimana dengan kode di bawah ini?


    <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

person Rubens Farias    schedule 06.10.2009
comment
Terima kasih ini juga berhasil, jawaban Anda diterima bersamaan dengan jawaban mjmarsh. Tapi kalian berdua membantuku, terima kasih! - person bn.; 07.10.2009