我有一个文件<?xml veresion="1.0 encoding="UTF-8">
<foo name="1" b="2">
<bar name="11" b="22">
<baz name="111" b="222"/>
<baz name="112" b="223"/>
...
</bar>
</foo>
styles.xsl
和xslt文件 <?xml version="1.0" encoding="utf-8">
<xsl:stylesheet version=1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<!--xslt-->
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml-stylesheet type="text/xsl" href="styles.xsl"?>
我可以通过在test.xml
中添加此行newtest.xml
来正确显示页面。现在我正在尝试将两个文件合并为一个.xml文件,以便更方便地打开。我尝试合并两个xml文档的内容,但这不起作用:
<?xml veresion="1.0 encoding="UTF-8">
<xsl:stylesheet version=1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
...
</html>
</xsl:template>
</xsl:stylesheet>
'2015-08-01 08:15:00'
在其他SO线程上执行以下步骤将返回空白或未格式化的页面
我错过了什么吗?
答案 0 :(得分:2)
XSLT文档也是格式良好的XML文档。 XSLT用于转换XML文档,因此理论上您可以将XSLT应用于自身。
假设您当前的XSLT看起来像这样
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:template match="foo">
<h1><xsl:value-of select="@name" /></h1>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="bar">
<h2><xsl:value-of select="@name" /></h2>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="baz">
<p><xsl:value-of select="@name" /></p>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//foo" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
您可以将XML嵌入到XSLT中,而不是将XSLT嵌入到test.xml中,而是将其保存为XML文件。一种方法是创建一个虚拟命名空间,将XML作为XSLT
中的一个元素<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my"
exclude-result-prefixes="xsl my">
<my:embeddedXML>
<foo name="1" b="2">
<bar name="11" b="22">
<baz name="111" b="222"/>
<baz name="112" b="223"/>
</bar>
</foo>
</my:embeddedXML>
然后,不要执行<xsl:apply-templates select="//foo" />
,而是将其替换为
<xsl:apply-templates />
但是你还需要一个模板来忽略&#34;输入&#34;中的xsl:
元素。 XML
<xsl:template match="xsl:stylesheet">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="xsl:*" />
然后只需将此行添加到其顶部,并将此文件另存为Test.xml
:
<?xml-stylesheet type="text/xsl" href="Test.xml"?>
因此,有效的XML引用自身来获取XSLT。
试试这个XML / XSLT:
的test.xml
<?xml-stylesheet type="text/xsl" href="Test.xml"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl my" xmlns:my="my">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*" />
<my:embeddedXML>
<foo name="1" b="2">
<bar name="11" b="22">
<baz name="111" b="222"/>
<baz name="112" b="223"/>
</bar>
</foo>
</my:embeddedXML>
<xsl:template match="foo">
<h1><xsl:value-of select="@name" /></h1>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="bar">
<h2><xsl:value-of select="@name" /></h2>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="baz">
<p><xsl:value-of select="@name" /></p>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="xsl:stylesheet">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="xsl:*" />
</xsl:stylesheet>
请注意,如果需要,此XSLT仍可应用于其他XML文件