我正在尝试在我的xsl文档中使用<xsl:attribute-set>
,但我不断收到错误消息:
我还检查了W3Schools网站对XSLT attribute-sets的解释,并发现:
Must be child of <xsl:stylesheet> or <xsl:transform>.
我不明白这意味着什么,有人可以解释一下吗?
如果您需要有关我的文件的更多信息,请设置WAMP服务器,请在下面评论。
我的XSL文档的前两行是:
<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
我不知道他们做了什么,只有没有它,我的XSL将无法正常工作。
我基本上使用这个XSL文件将我的XML转换为HTML。整个过程由PHP完成:
# START XSLT
$xslt = new XSLTProcessor();
$XSL = new DOMDocument();
$XSL->load('hello.xsl');
$xslt->importStylesheet($XSL);
# LOAD XML FILE
$XML = new DOMDocument();
$XML->load('hello.xml');
#PRINT
print $xslt->transformToXML($XML);
答案 0 :(得分:2)
您正在使用极少见的"literal result element as stylesheet"工具,也称为“简化样式表”,其中xsl:stylesheet
元素和最外层xsl:template
是隐式的。你的问题说明了为什么这个设施很少使用 - 它很快就会耗尽蒸汽。因为没有xsl:stylesheet
元素,所以xsl:stylesheet
的常见子元素都不存在,这包括属性集的声明。
更改您的代码,将其包装在明确的xsl:stylesheet
和xsl:template match="/"
中。然后在与xsl:attribute-set
相同的级别添加xsl:template
。
答案 1 :(得分:1)
以下是在XSLT开始添加到问题之前编写的。它没有解决问题的literal result element as stylesheet性质。迈克尔凯的回答确实如此。
xsl:attribute-set
必须是xsl:stylesheet
元素的子元素,它是XSLT的根元素。这与xsl:output
或xsl:template
相同。
standard将这些元素描述为“顶级元素”类别。
w3schools.com以多种方式说:
例如
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:attribute-set name="body-attr">
<xsl:attribute name="color">red</xsl:attribute>
</xsl:attribute-set>
<xsl:template match="/">
<xsl:element name="result" use-attribute-sets="body-attr">
</xsl:element>
</xsl:template>
</xsl:stylesheet>
答案 2 :(得分:0)
使用简化语法的另一种方法是将xmlns移出html
标记,然后通过document
函数内联源文件:
<?xml version="1.0" encoding="UTF-8"?>
<section
xsl:version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns=""
>
<blockquote>
<xsl:for-each select="document('movies.xml')//processing-instruction()[contains(., '2014')]">
<p><xsl:value-of select="concat( local-name(),' ', current() )"/></p>
<a href="{substring-before(document('movies.xml')//processing-instruction(),',')}">
<input type="button" value="Stream {local-name()}"/>
</a>
<a href="{substring-after(document('movies.xml')//processing-instruction(),',')}">
<input type="button" value="{local-name()} Soundtrack"/>
</a>
</xsl:for-each>
</blockquote>
</section>
然后加入:
<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
<include href="simple.xsl"/>
<attribute-set name="foo"></attribute-set>
<apply-templates/>
</stylesheet>
反过来,这意味着启动转换的唯一有用方法是提供文档节点作为初始匹配选择,使用未命名模式与隐式match =“/”模板规则匹配。
<强>参考强>