xslt 1.0 xsl:为每个通过比较节点获取所需的值

时间:2016-03-11 00:32:18

标签: xml xslt xpath xslt-1.0

因为我是xslt的新手,对不起,如果我的问题标题不正确!

我的xml:

<workorder>
    <wo>wo1234</wo>
    <locspec>
        <attrid>accessrd</attrid>
        <attrvalue>nogothruroad</attrvalue>
        </locspec>
        <locspec>
        <attrid>phone</attrid>
        <attrvalue>99123</attrvalue>
        </locspec>
        <locspec>
        <attrid>accessvehicle</attrid>
        <attrvalue></attrvalue>
    </locspec>
</workorder>

期望的输出:

wo: wo1234
Road to access: nogothrurd
Phone number: 99123
Do you have vehicle access: 

我的xsl:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:xs="http://www.w3.org/2001/XMLSchema"  version="1.0">

    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="workorder">        
        <xsl:apply-templates select="wo" />
        <xsl:apply-templates select="locspec" />
</xsl:template>

    <xsl:template match="wo">
        <xsl:text>wonum: </xsl:text><xsl:value-of select="." />
    </xsl:template>
    <xsl:template match="locspec">
        <xsl:for-each select="locspec/attrid">
        <xsl:text>Road to access: </xsl:text>
        <xsl:value-of select="locspec/attrid"/>
         </xsl:for-each>        
    </xsl:template>
    </xsl:stylesheet>

需要的逻辑是:如果attrid是&#34; accessrd&#34;然后得到它的attrvalue,如果attrid是&#34;电话&#34;然后得到它的attrvalue,如果attrd是&#34; accessvehicle&#34;然后得到它的attrvalue。

坦率地说,我不知道如何将xsl编码用于我想要的输出。 请帮我。提前谢谢!

当前输出为空。

1 个答案:

答案 0 :(得分:0)

试试这个:

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

  <xsl:template match="wo">
    <xsl:value-of select="concat(name(), ': ', .)"/>
  </xsl:template>

  <xsl:template match="locspec">
    <xsl:text>
</xsl:text>
    <xsl:choose>
      <xsl:when test="attrid = 'accessrd'">
        <xsl:text>Road to access</xsl:text>
      </xsl:when>
      <xsl:when test="attrid = 'phone'">
        <xsl:text>Phone number</xsl:text>
      </xsl:when>
      <xsl:when test="attrid = 'accessvehicle'">
        <xsl:text>Do you have vehicle access</xsl:text>
      </xsl:when>
    </xsl:choose>
    <xsl:value-of select="concat(': ', attrvalue)"/>
  </xsl:template>

  <xsl:template match="text()"/>

</xsl:stylesheet>