как изменить xml attibute используя xslt - PullRequest
0 голосов
/ 01 мая 2018

у меня есть атрибут xml dsc:

<DMD dsc="1">

В схеме

<xs:attribute name="dsc" type="xs:boolean" use="required"/>

Я хочу изменить значение «0» на «нет» и «1» на «да».

Мой xslt:

<td style="padding-left:10px; width:1.64in; ">
            <xsl:for-each select="@dsc">
                <span style="color:#0024c0; ">
                   <xsl:value-of select="string(.)"/>                                                               
               </span>
            </xsl:for-each>
        </td>

Я пробовал xsl: сопоставление с шаблоном и xsl: выбор, но у меня все еще нет решения. Я могу трансформировать элементы, но без атрибута. Спасибо

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

проверьте этот код

 <td style="padding-left:10px; width:1.64in; ">
        <xsl:for-each select="//@dsc">
            <span style="color:#0024c0; ">
            <xsl:choose>
                <xsl:when test="//@dsc='1'"><xsl:text>yes</xsl:text></xsl:when>
                <xsl:otherwise><xsl:text>no</xsl:text></xsl:otherwise>
                </xsl:choose>
           </span>
        </xsl:for-each>
    </td>
0 голосов
/ 01 мая 2018

Вы можете попробовать следующую таблицу стилей, которая использует шаблоны , чтобы заменить все вхождения атрибута dsc соответствующими значениями:

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes" omit-xml-declaration="yes" />

  <!-- identity template - copy all (other) nodes as given -->
  <xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <!-- Replace '1' attribute values with 'yes' values -->
  <xsl:template match="@dsc[.='1']">
    <xsl:attribute name="dsc">
        <xsl:value-of select="'yes'"/>
    </xsl:attribute>
  </xsl:template>

  <!-- Replace '0' attribute values with 'no' values -->
  <xsl:template match="@dsc[.='0']">
    <xsl:attribute name="dsc">
        <xsl:value-of select="'no'"/>
    </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>
0 голосов
/ 01 мая 2018

XPath @dsc является правильным, если вы находитесь в контексте элемента DMD, но это не видно из-за частичного XSL, который вы опубликовали.

Если вы не в контексте DMD, xpath будет whatever/elements/DMD/@dsc.

Однако краткая форма . предназначена для текущего элемента. Вы не можете использовать это, чтобы получить значение атрибута, насколько я знаю.

И я не понимаю, почему вы делаете цикл с xsl:for-each. Существует только один атрибут dsc.

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