如何在使用XSLT时正确使用XML属性

时间:2013-02-18 20:16:47

标签: xml xslt xpath

我制作了一个XML文件,其中一个例子就在这里:

  <flight flightid="1">
<flightno>EK98</flightno>
<callsign>UAE98</callsign>
<airline>Emirates Airline</airline>
<altitude height="feet">41000 feet</altitude>
<speed ratio="mph">564 mph</speed>
<plane planeid="1">
  <name>Airbus 330</name>
  <speed>567 mph</speed>
  <wingspan>199 ft 11 in</wingspan>
  <length>301 ft 7 in</length>
  <registereddate>07-06-10</registereddate>
</plane>
<route>
  <routename>Fiumicino-Dubai</routename>
  <course bearing="degrees">154 degrees</course>
  <distance unit="miles">2697 miles</distance>
  <duration>PT5H30M</duration>
  <from>
    <iatacode>FCO</iatacode>
    <airport>Fiumicino</airport>
    <country>Italy</country>
    <city>Rome</city>
    <latitude>41.8044</latitude>
    <longitude>12.2508</longitude>
    <yahoowoeid>715520</yahoowoeid>
  </from>
  <to>
    <iatacode>DXB</iatacode>
    <airport>Dubai Intl</airport>
    <country>UAE</country>
    <city>Dubai</city>
    <latitude>25.2528</latitude>
    <longitude>55.3644</longitude>
    <yahoowoeid>1940345</yahoowoeid>
  </to>
</route>
</flight>

在距离元素中,您可以看到英里的单位:

<distance unit="miles">2697 miles</distance>

在我写过里程的文本中,我觉得属性中的点是这样我可以使用它并输出属性值和距离值? 以下是我的XSL示例,其中使用了距离以及我尝试添加单位:

<tr>
  <td><xsl:attribute name="class">lside</xsl:attribute>Distance</td>
  <td colspan="2"><xsl:attribute name="class">rside</xsl:attribute><xsl:value-of select="/flights/flight/route[routename/. ="Fiumicino-Dubai"]/distance"/><xsl:value-of select="@unit" /></td>
</tr>

虽然我问这个问题,但我的初衷是使用属性的正确方法,这就是存在属性的原因,以便创建一个全局类型的说测量值,它总是相同的吗?

1 个答案:

答案 0 :(得分:1)

属性本质上是XML文档中元素值对的简短形式。因此<distance unit="miles">2697 miles</distance>与编写以下内容相同:

<distance>
    <unit>
        <value>miles</value>
    </unit>
    <value>2697</value>
</distance>

是的,您在上面的XML中正确使用了element属性。您可以随意选择形成XML文档 - 因此可以相应地提取相关信息。

将以下评论中的答案转移到答案中:

要使用XPath访问具有特定属性的元素的值,请使用以下内容来区分:

“/ flight / flight / route [routename /。=”Fiumicino-Dubai“] /距离/ @ unit = @ miles