2013-11-07 4 views
1

Хорошо, я пытаюсь динамически устанавливать атрибуты ввода через тег XML. Например:XSL-атрибуты foreach как атрибуты ввода HTML

<text name='text_name' value='text_value'>text_display</text> 

Я хочу запустить Еогеасп, чтобы сделать его так назвать, значение, или любой другой атрибут в <text> будет вставлен в качестве атрибута для ввода HTML и использовать значение <text> в качестве метки/заполнитель.

<xsl:for-each select="text"> 
    <label><xsl:value-of select="." /></label> 
    <input type='textfield' placeholder='{.}' /> 
</xsl:for-each> 

Теперь я знаю, что могу использовать:

<xsl:for-each select="@*"> 

, но я не знаю, как вставить, что во входной тег.

Заранее благодарим за любые советы.

+0

Можете ли вы привести пример ввода и желаемый результат? – LarsH

ответ

2

Просьба и использования push focused (rather than pull-focused) XSLTs с более apply-templates и менее for-each утверждений.

Нет ничего, что говорит о том, что определение элемента или его атрибутов должно быть в одном шаблоне. Поэтому, когда вы делаете шаблон для элемента <text>, вы можете просто создать элемент <input> и apply-templates по всем атрибутам.

<xsl:template match="text"> 
<input> 
    <xsl:apply-templates select="@*"/> 
    <label><xsl:value-of select="." /></label> 
</input> 
</xsl:template> 

Во-вторых, то, что вы пытаетесь сделать, это буквально копировать атрибуты в новый документ, так, а не воссоздать их, просто copy их, например, так:

<xsl:template match="text/@*"> 
    <xsl:copy/> 
</xsl:template> 

Итак, вот полная таблица стилей ...

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/texts"> 
<xsl:apply-templates /> 
</xsl:template> 

<xsl:template match="text"> 
<input> 
    <xsl:apply-templates select="@*"/> 
    <label><xsl:value-of select="." /></label> 
</input> 
</xsl:template> 

<xsl:template match="text/@*"> 
    <xsl:copy/> 
</xsl:template> 

</xsl:stylesheet> 

... когда применяется к этому входному документу XML ...

<texts> 
    <text name='text_name' value='text_value'>text_display</text> 
    <text name='text_name2' value='text_value2'>other_display</text> 
</texts> 

... дает этот результат XML

<input name="text_name" value="text_value"> 
    <label>text_display</label> 
</input> 
<input name="text_name2" value="text_value2"> 
    <label>other_display</label> 
</input> 
+0

Большое спасибо, я все еще новичок в XSLT, поэтому я ценю ссылку и советы. – Devon

Смежные вопросы