XSL解析节点的多个属性值

时间:2017-06-28 15:24:30

标签: xml xslt

我正在尝试获取具有多个属性的节点的airings / mediafile / startTime值。

以下是XML的摘录:

<show epgId="DT523214136">
    <title>America Reframed</title>
    <description>9-Man Teams for this a competitive Chinese-American sport prepare for the national championship in Boston.</description>
    <airing channelId="129" duration="7200" sageDbId="6422008" startTime="2017-01-25T01:00:00.00Z">
        <manualRecord/>
        <recordSchedule duration="7200" startTime="2017-01-25T01:00:00.00Z"/>
        <mediafile duration="7200" sageDbId="6423032" startTime="2017-01-25T01:00:00.02Z" type="TV">
            <segmentList>
                <segment duration="7200" filePath="E:\Record\AmericaReframed-6422008-0.mpg" startTime="2017-01-25T01:00:00.02Z"/>
            </segmentList>
        </mediafile>
    </airing>
</show>

这就是我所拥有的。我的startTime没有输出。我已经尝试了一切,但xsl让我感到困惑和晦涩难懂。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:user="urn:my-scripts">

<xsl:template match="/">
<html>
<body>
<h2></h2>
  <table WIDTH="100%" border="1" style="font-family:arial; font-size:   13px;" >
    <tr bgcolor="#9acd32">
      <th style="text-align:left">Title</th>
      <th style="text-align:left">Description</th>
          <th style="text-align:left">Category</th>
      <th style="text-align:left">Date</th>
    </tr>
    <xsl:for-each select="sageShowInfo/showList/show">
    <xsl:sort select="category"/>
    <xsl:sort select="title"/>
    <tr>
      <td width="30%"><xsl:attribute name="STYLE">color:A50F4B</xsl:attribute><xsl:value-of select="title"/>: <xsl:value-of select="episode"/></td>
      <td><xsl:value-of select="description"/></td>
      <td><xsl:value-of select="category"/> </td>

<xsl:comment>this doesn't work: </xsl:comment>
      <xsl:for-each select="airing">
                 <td width="10%"><xsl:value-of select="substring(mediafile/startTime,1,10)"/></td>
     </xsl:for-each>
<xsl:comment>-------</xsl:comment>

    </tr>
    </xsl:for-each>
  </table>

</body>
</html>
</xsl:template>
</xsl:stylesheet>

2 个答案:

答案 0 :(得分:0)

属性引用以@为前缀,因此它应该是

...mediafile/@startTime...

答案 1 :(得分:0)

此语句试图在mediafile元素

中选择startTime元素的内部文本
<xsl:value-of select="substring(mediafile/startTime,1,10)"/>

相反,您应该选择mediafile元素的startTime属性:

<mediafile duration="7200" sageDbId="6423032" startTime="2017-01-25T01:00:00.02Z" ...

所以你会使用:

<xsl:value-of select="substring(mediafile/@startTime,1,10)"/>