Простой вопрос XSLT: установка значений атрибутов внутреннего HTML-узла, таких как <div id = "нечто"> - PullRequest
1 голос
/ 06 октября 2009

Мне трудно найти ответ на следующий вопрос, который кажется довольно распространенным, поэтому я, должно быть, упускаю что-то фундаментальное. Не могли бы вы помочь мне?

С учетом придуманной схемы XML, примера ввода XML и примера XSLT, приведенного ниже, используемого для преобразования XML в HTML. Как мне установить атрибуты внутри тегов? Например <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 имеет идентификатор номера дома:

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

Ответы [ 3 ]

4 голосов
/ 06 октября 2009

Попробуйте:

<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>
4 голосов
/ 06 октября 2009

Не понятно, что вы здесь хотите. Вы имеете в виду, что вы хотите установить свой атрибут на результат некоторого выражения XPath (например, Delta)? Если это так, это должно сработать:

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

В качестве альтернативы вы можете использовать <xsl:element> и <xsl:attribute>, как описывают другие ответы, хотя типичный вариант использования этого - когда необходимо сгенерировать само имя элемента / атрибута.

1 голос
/ 06 октября 2009

А как насчет кода ниже?


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

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...