XSL - Identity transform - изменить значение элемента - PullRequest
3 голосов
/ 04 ноября 2011

Я хотел бы изменить значение элемента RequestQueue в разделе "@sorregion name [. = 'Default']" на "DEFAULT.REQUEST. Я попытался использовать приведенный ниже шаблон идентификации. Может ли кто-нибудь помочь мне с этим шаблоном dentity. Я хотел бы использовать только шаблон личности. Мой xsl файл

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="@name[.='default']/QueueDetails/RequestQueue">
         <xsl:value-of select="'DEFAULT.REQUEST'"/>
    </xsl:template>
</xsl:stylesheet>

Мой ввод xml

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

То, как я подхожу к этому вопросу, аналогично тому, как это сделал @Kirill Polishchuk (+1 btw), и это означает переопределение преобразования идентификаторов только для узла, который необходимо изменить.

Однако в вашемНа вопрос вы указали: « Я бы хотел использовать только шаблон идентификации. ».Если это действительно так и вам нужен только один шаблон, вы можете сделать это следующим образом:

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

  <xsl:template match="node()|@*">
    <xsl:choose>
      <xsl:when test="current()[name()='RequestQueue'][ancestor::SORRegion[@name = 'default']]">
        <xsl:copy>
          <xsl:text>DEFAULT.REQUEST</xsl:text>
        </xsl:copy>
      </xsl:when>
      <xsl:otherwise>
        <xsl:copy>
          <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>        
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>

Мне было бы интересно узнать, почему вы хотите использовать только шаблон преобразования идентификаторов.Если вам в конечном итоге потребуется изменить больше, чем просто RequestQueue, это будет ужасно быстро.

2 голосов
/ 04 ноября 2011

Используйте этот шаблон:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

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

    <xsl:template match="SORRegion[@name = 'default']/QueueDetails/RequestQueue">
      <xsl:copy>
        <xsl:text>DEFAULT.REQUEST</xsl:text>
      </xsl:copy>
    </xsl:template>

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