Как переименовать атрибут с помощью XSLT? - PullRequest
11 голосов
/ 21 апреля 2010

У меня есть такой xml:

<person name="foo" gender = "male" />

Я хочу преобразовать его в

<person id="foo" gender="male" />

Есть ли способ сделать это с помощью XSLT?

  • У меня будет много дочерних узлов лично

  • У меня будет больше атрибутов в человеке.

Ответы [ 2 ]

15 голосов
/ 21 апреля 2010

Это очень просто: используйте преобразование идентичности и создайте шаблон, который преобразует атрибут name:

<xsl:template match="node()|@*">
  <xsl:copy>
    <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="@name">
   <xsl:attribute name="id">
      <xsl:value-of select="."/>
   </xsl:attribute>
</xsl:template>

Это оставит все в документе, кроме атрибутов name, такими, какие они есть. Если вы хотите изменить только атрибут name для элементов person, поместите более строгий XPath в атрибут match шаблона, например person/@name.

0 голосов
/ 21 апреля 2010

Это должно сделать это, не совсем уверенный в {name ()}, но вы можете заменить это на "person"

> <xsl:template match="person">
>       <xsl:element name="{name()}">
>         <xsl:attribute name="id">
>           <xsl:value-of select="@name"/>
>         </xsl:attribute>
>         <xsl:attribute name="gender">
>           <xsl:value-of select="@gender"/>
>         </xsl:attribute>
>       </xsl:element>
>     </xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...