0

我有一个 xml。在这个 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] "/>

但它不起作用。在此先感谢您的帮助。

4

3 回答 3

1

试试这个代码

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

(或者)

如果您已指定与“/”根匹配的模板,则使用以下语法。

<xsl:template match="/">

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

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

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

于 2013-10-04T05:25:16.103 回答
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

而已

于 2013-10-04T05:39:53.320 回答
0

在您的 value-of 中,您正在寻找任何videos/YoutubeVideoURL具有@YoutubeUrl. 如果您正在寻找获得的价值@YoutubeUrl那么您需要像这样将其从谓词中取出。

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

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

于 2013-10-04T09:24:49.470 回答