2015-04-19 28 views
-2

我想使用下面的XSLT文件将此XML转换为HTML。但由于某种原因,它不是填充#juices#smoothies div。 尝试了很多事情,看到了一些例子,但仍然没有设法让这个工作。 对不起,有这么几个细节,但我不知道这里有什么问题。XSLT到HTML - 转换时空格

任何帮助?

链接: XML XSL

+0

也许你有一些代码? – Azat

+0

检查问题的链接。这里粘贴时间太长。 – rjpedrosa

+0

样本输入XML –

回答

1

这主要是一个命名空间问题。命名空间是XML中的一个基本概念。如果您不熟悉命名空间,请花时间学习并理解它们。

您的输入XML有一个默认名称空间<products xmlns="http://www.dcs.bbk.ac.uk/~rpedro02/ns/products">这意味着所有元素都属于该名称空间,尽管它们没有名称空间前缀。如果您要将特定命名空间中的元素作为目标,则XPath查询始终需要添加前缀 - 查询不会继承默认命名空间。

在你的情况下,这意味着你需要用一个前缀声明你的输入XML的默认名称空间,然后在引用输入XML文档中的任何元素时使用该前缀。主要是这意味着更改<xsl:template match="/products/product">模板中的查询。

一些示例代码:Declare这样

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
xmlns:prod="http://www.dcs.bbk.ac.uk/~rpedro02/ns/products" > 

然后该命名空间使用前缀prod在查询像这样

<xsl:template match="/prod:products/prod:product"> 
    <div class="product"> 
     <img> 
      <xsl:attribute name="alt"> 
       <xsl:value-of select="prod:name"/> 
      </xsl:attribute> 
      <xsl:attribute name="src"> 
       <xsl:value-of select="prod:picture"/> 
      </xsl:attribute> 
     </img> 
     ... 
+0

非常感谢!现在我懂了! 只是一个简单的问题:我如何为属性添加前缀?像这里: '​​ rjpedrosa

+0

默认名称空间不适用于前缀不匹配的属性,因此不需要使用名称空间前缀。在这种情况下,您的问题不同,您正在查询“”元素的“标签”属性,但属性属于其子元素。改为使用''。 – jasso

+0

是的,注意到发布评论后,解决了我自己。但再次感谢。认为'“意思是”对于的每个元素“,但没有。这就是习惯在编程语言的数组中使用foreach的问题。 :P – rjpedrosa

0

它的工作,如果我改变

  <h1>Products</h1> 
      <div id="juices" class="products"> 
       <h2>Juices</h2> 
       <xsl:apply-templates select=".//*[local-name()='product' and @type='juice']" /> 
      </div> 
      <div id="smoothies" class="products"> 
       <h2>Smoothies</h2> 
       <xsl:apply-templates select=".//*[local-name()='product' and @type='smoothie']" /> 
      </div> 

的XPath不赶上/产品/产品[@类型= ...] ..

并将与产品匹配的模板更改为

<xsl:template match="./*[local-name()='product']"> 
    <div class="product"> 

检查xsl和它的输出here

+0

它现在评估并捕捉这些条件。但它没有正确应用模板。似乎转换成纯文本没有HTML标签。还有什么帮助?对不起,这里是新手。 – rjpedrosa

+0

得到此错误:E [Saxon6.5.5]表达式中的错误./*[local-name()='product']:模式中的意外标记,找到。 – rjpedrosa

+0

现在“打印”标签,但它们是空的。这是杀了我...... S – rjpedrosa