如何使用xslt更改xml attibute

时间:2018-05-01 13:31:02

标签: xslt

我有xml属性dsc:

<DMD dsc="1">

在架构中

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

我想将值“0”更改为“no”,将“1”更改为“yes”。

我的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 :(得分:1)

您可以尝试以下使用模板的样式表,用适当的值替换所有出现的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>

答案 1 :(得分:0)

如果您位于元素@dsc的上下文中,则XPath DMD是正确的,但由于您发布的部分XSL,这不可见。

如果您不在DMD的上下文中,则xpath为whatever/elements/DMD/@dsc

但是,短格式.适用于当前元素。据我所知,你不能用它来获取属性的值。

我不知道你为什么要用xsl:for-each进行循环。只有一个属性dsc

答案 2 :(得分:0)

检查此代码

 <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>