XSLT: преобразовать атрибут одного элемента в новый элемент - PullRequest
0 голосов
/ 30 мая 2018

В основном я хочу взять атрибут только одного определенного элемента (category) и создать новый дочерний элемент (categoryid) со значением атрибута, преобразованным в значение элемента.

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

<root>
  <category id="123">
    <something id="777">987</something>
    <nothing>555</nothing>
  </category>
</root>

в это ...

<root>
  <category>
    <categoryid>123</categoryid>
    <something id="777">987</something>
    <nothing>555</nothing>
  </category>
</root>

Ответы [ 2 ]

0 голосов
/ 31 мая 2018
<xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="category">
        <xsl:copy>
            <xsl:element name="categoryid">
                <xsl:value-of select="@id"/>
            </xsl:element>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="something">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="nothing">
        <xsl:element name="nothing">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
0 голосов
/ 30 мая 2018

Начните с преобразования идентичности и добавьте шаблон, соответствующий атрибуту, который вы хотите преобразовать в элемент ...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

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

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

</xsl:stylesheet>

Fiddle: http://xsltfiddle.liberty -development.net/eiZQaFa

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