Xslt преобразование - PullRequest
       1

Xslt преобразование

0 голосов
/ 21 февраля 2011

Я хочу преобразовать с помощью xsl:

<?xml version="1.0" encoding="utf-16"?>
<root>
<value1>test1</value1>
<value2>test2</value2>
<value3>test3</value3>
</root>

in:

<input type="hidden" value="test1" name="value1" />
<input type="hidden" value="test2" name="value2" />
<input type="hidden" value="test3" name="value3" />

Какой лучший способ сделать это?

Спасибо

Ответы [ 2 ]

4 голосов
/ 21 февраля 2011

Я думаю, что это правило семантически ясно и успешно:

<xsl:template match="*[starts-with(name(),'value')]">
    <input type="hidden" value="{.}" name="{name()}" /> 
</xsl:template> 
1 голос
/ 21 февраля 2011

Ваш XML плохо спроектирован;если возможно, вместо <value1> вы должны использовать <value name="value1"> или что-то подобное.

Сказав это, вы можете сделать:

<xsl:template match="*[starts-with(name(),'value')]">
  <xsl:element name="input">
    <xsl:attribute name="type">hidden</xsl:attribute>
    <xsl:attribute name="value">
      <xsl:value-of select="." />
     </xsl:attribute>
    <xsl:attribute name="name">
      <xsl:value-of select="name()" />
    </xsl:attribute>
  </xsl:element>
</xsl:template>

Если бы вы были элементами <value name="value1">совпадение становится просто match="value", что намного быстрее, а атрибут имени становится <xsl:value-of select="@name">.

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