使用xslt从xml获取属性

时间:2013-10-04 05:13:09

标签: xml xslt

我有一个xml.in这个xml我有一个名为video的节点,如下面的

  <product>
 <id>676872</id>
  <weightingram>510</weightingram>
  <volume>0</volume>
  <discountgroup />
 <name>Product name (500 g)</name>
  <vat>10,49</vat>
  <webbestprice extra="webbestprice">0</webbestprice>
  <webreturn extra="webreturn">0</webreturn>
  <weboutdate extra="weboutdate">01-01-2013 00:00:00</weboutdate>
  <webaltitem extra="webaltitem" />
  <filters extra="filters">
    <ISP_WebItem FILTER="Type" FILTERNAME="type" UNITCODE=""/>
    <ISP_WebItem FILTER="Type2" FILTERNAME="500" UNITCODE="g"/>
  </filters>
  <videos extra="videos">
    <YoutubeVideoURL RowNumber="33" ProductID="676872" YoutubeUrl="http://www.youtube.com/watch?v=EjoEIHVk9qM" YoutubeImage="https://img.youtube.com/vi/EjoEIHVk9qM/2.jpg"/>
  </videos>
</product>

上面的xml正在使用

<textarea>
<xsl:copy-of select="."/>
</textarea>

我需要从这个xml中获取属性YoutubeUrl的值。我试过像

这样的东西
 <xsl:value-of select="./videos/YoutubeVideoURL[@YoutubeUrl] "/>

但它没有用。谢谢你提前帮忙。

3 个答案:

答案 0 :(得分:1)

试试此代码

<xsl:template match="YoutubeVideoURL">
   <xsl:value-of select="@YoutubeUrl"/>
</xsl:template>

(或)

如果您指定了与“/”root匹配的模板,请使用以下语法。

<xsl:template match="/">

 .....
   <textarea>
      <xsl:copy-of select="." />
   </textarea>
   <p>
   <xsl:value-of select="//videos//YoutubeVideoURL//@YoutubeUrl"/>
   </p>
</xsl:template>

Copy-of将复制select表达式中指定的xml元素。因此TextArea将具有该结构的xml元素。并且您正在使用value-of来检索需要元素选择的xml属性。所以,它没有相关性。

您可以使用本文中提到的任一解决方案。

答案 1 :(得分:1)

你可以这样写

您的示例XML文件

<?xml version="1.0" encoding="UTF-8"?>
<videos extra="videos">
    <YoutubeVideoURL RowNumber="1" ProductID="12452" YoutubeUrl="http://www.youtube.com/watch?v=efhrtgdbo" YoutubeImage="https://img.youtube.com/vi/efhrtgdbo/2.jpg"/>
</videos>

您的示例XSL文件

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml"/>
    <xsl:template match="YoutubeVideoURL">
        <xsl:value-of select="@YoutubeUrl"/>
    </xsl:template>
</xsl:stylesheet>

最终输出

  

http://www.youtube.com/watch?v=efhrtgdbo

就是这样

答案 2 :(得分:0)

在您的价值中,您正在寻找属性为videos/YoutubeVideoURL的任何@YoutubeUrl。如果您希望获得@YoutubeUrl,那么您需要将其从谓词中删除。

<xsl:value-of select="./videos/YoutubeVideoURL/@YoutubeUrl" />

这当然假设您的路径和模板已经正确设置,以便将此值定位在其当前位置。