我想使用下面的XSLT文件将此XML转换为HTML。但由于某种原因,它不是填充#juices
和#smoothies
div。 尝试了很多事情,看到了一些例子,但仍然没有设法让这个工作。 对不起,有这么几个细节,但我不知道这里有什么问题。XSLT到HTML - 转换时空格
任何帮助?
我想使用下面的XSLT文件将此XML转换为HTML。但由于某种原因,它不是填充#juices
和#smoothies
div。 尝试了很多事情,看到了一些例子,但仍然没有设法让这个工作。 对不起,有这么几个细节,但我不知道这里有什么问题。XSLT到HTML - 转换时空格
任何帮助?
这主要是一个命名空间问题。命名空间是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>
...
它的工作,如果我改变
<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
也许你有一些代码? – Azat
检查问题的链接。这里粘贴时间太长。 – rjpedrosa
样本输入XML –