我有一个档案 test.xml
<?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>
和一个xslt文件 styles.xsl
<?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
。现在,我试图将两个文件合并为一个.xml文件,以便更方便地打开。我尝试合并两个xml文档的内容,但是没有用:
newtest.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>
在其他SO线程上执行以下步骤将返回空白页面或未格式化的页面
我有什么想念的吗?
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>
与其将XSLT嵌入到test.xml中,还可以将XML嵌入到XSLT中,然后将其另存为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 />
但是您还需要一个模板来忽略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文件
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句