1

我很难找到以下问题的答案,这似乎很常见,所以我一定错过了一些基本的东西。你能帮帮我吗?

给定人为设计的 XML 模式、示例 XML 输入和下面用于将 XML 转换为 HTML 的示例 XSLT。如何在标签中设置属性?例如<div id=HouseNumber>,<input type="checkbox" id=Zipcode>等?

注意: HouseNumber 和 Zipcode 周围没有引号是故意的。我试图将这些属性的值从 XML 输入中放入 id=""、for=""、name="" 等。

感谢您抽出宝贵时间,并就问题的第一个版本提供意见。

十亿

示例 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>

示例 XML 输入:

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

示例 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>

所需的 HTML 输出,其中 div 标记的 id 为门牌号:

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

3 回答 3

4

尝试:

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

锚标记示例:

<xsl:element name="a">
      <xsl:attribute name="href">http://example.com</xsl:attribute>            
      <xsl:text>My Link Text</xsl:text>
</xsl:element>
于 2009-10-06T17:52:14.113 回答
4

目前尚不清楚您在这里想要什么。您的意思是要将属性设置为某个 XPath 表达式的结果(如Delta)?如果是这样,这应该可以解决问题:

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

或者,您可以使用<xsl:element>and <xsl:attribute>,正如其他答案所描述的那样,尽管典型的用例是必须生成元素/属性名称本身。

于 2009-10-06T17:57:50.873 回答
1

What about code below?


    <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

于 2009-10-06T17:48:28.113 回答