Я пытаюсь использовать <xsl:for-each select="@*">
, чтобы захватить все атрибуты данного элемента, но когда я это сделаю, мой оператор <xsl:choose>
не выполнит.Цитирование всех атрибутов XML-элемента в XSLT
Вот элемент, который я работаю с:
<textBox id="Airfare" value="" label="text 1"/>
Вот шаблон XSLT Я использую:
<xsl:template match="textBox">
<div>
<xsl:choose>
<xsl:when test="@label">
<xsl:value-of select="@label"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>No Label Defined</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:element name="input">
<xsl:attribute name="type">text</xsl:attribute>
<xsl:for-each select="@*">
<xsl:choose>
<xsl:when test="@id">
<xsl:attribute name="name">form_<xsl:value-of select="@id"/></xsl:attribute>
<xsl:attribute name="id">form_<xsl:value-of select="@id"/></xsl:attribute>
</xsl:when>
<xsl:when test="@label">
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="current()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:element>
</div>
И когда я генерировать HTML используя PHP Я получаю это:
<div>text 1<input type="text" id="Airfare" value="" label="text 1"></div>
Как вы можете видеть, он не добавил form_
к атрибуту id, он не сгенерировал атрибут имени и не пропустил атрибут метки.
Хороший вопрос (+1). См. Мой ответ для объяснения проблемы и краткое и простое решение, которое соответствует духу XSLT. –