XML 到带有 XSL 的 XHTML
XML to XHTML with XSL
我有两个 XML 文件,其中包含两个词典,其中有 10 个单词,使用两种不同的语言(相同的单词)。我现在想使用 XSL 来 link 这两个 XML 并将它们转换为 XHTML。
我现在这样做的方式,似乎只给我一个 HTML 输出。我该怎么做,我必须将 HTML 转换为 XHTML 还是直接将其转换为 XHTML 的方法?
这是我的一本字典 XML 的样子:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="dict.css"?>
<Dictionary xmlns="https://translate.google.se/m/translate?hl=sv/german">
<Language>Swedish</Language>
<Content>
<Titel>Svensk ordlista</Titel>
<Author>
<Name> Translator </Name>
</Author>
<Words wordNum ="10">
<Word ID="0">Vatten</Word>
<Word ID="1">Häst</Word>
<Word ID="2">Bil</Word>
<Word ID="3">Katt</Word>
<Word ID="4">Hund</Word>
<Word ID="5">Snö</Word>
<Word ID="6">Gata</Word>
<Word ID="7">Hus</Word>
<Word ID="8">Bord</Word>
<Word ID="9">Hand</Word>
</Words>
</Content>
</Dictionary>
这就是我的 XML linking 的样子:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="dictionary.xsl"?>
<links>
<dictLink>german.xml</dictLink>
<dictLink>Dic-swedish.xml</dictLink>
<svgLogo>svglogo.svg</svgLogo>
</links>
这就是我的 XSL 的样子:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:variable name="dictionary1">
<xsl:value-of select="/links/dictLink[1]" />
</xsl:variable>
<xsl:variable name="dictionary2">
<xsl:value-of select="/dictionaries/dictLink[2]" />
</xsl:variable>
<xsl:variable name="logo">
<xsl:value-of select="/dictionaries/svgLogo" />
</xsl:variable>
<xsl:template match="/dictionaries">
<html> <body> <xsl:value-of select="document($dic1)/Dictionary/@xml:Language"/><br/> </xsl:for-each> </body></html> </xsl:template> </xsl:stylesheet>
这可能只是部分解决方案,但您可以使用以下模板输出一些 (X)HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:de="https://translate.google.se/m/translate?hl=sv/german"
exclude-result-prefixes="fo de">
<xsl:output method="html" indent="yes" />
<xsl:template match="/links">
<html>
<body>
<xsl:for-each select="dictLink">
<xsl:copy-of select="document(.)/*[local-name()='Dictionary']" /><br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
如果将此 XSLT 命名为 dictionary.xsl
并从浏览器调用第二个 XML,它应该将 Dic-swedish.xml
(第一个 XML)的内容复制到输出。
由于您使用的是 XSLT 1.0,请参阅 https://www.w3.org/TR/1999/REC-xslt-19991116#output。
因为结果树中的文档元素 html
不在任何命名空间中,所以您得到 HTML 输出。
有关生成 XHTML 输出的 XSLT 1.0 示例,请参阅 https://www.w3.org/TR/1999/REC-xslt-19991116#section-Document-Example。其中的关键部分是:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:output
method="xml"
indent="yes"
encoding="iso-8859-1"
/>
如果您想要 DOCTYPE 声明,您可以将 xsl:output
更改为:
<xsl:output
method="xml"
indent="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
omit-xml-declaration="yes" />
就我个人而言,我不会费心将编码设置为 ISO-8859-1。如果没有 encoding
属性,您将获得 UTF-8 或 UTF-16,而且很有可能是 UTF-8。无论是UTF-8还是UTF-16,使用输出的XML系统将能够处理编码。
我有两个 XML 文件,其中包含两个词典,其中有 10 个单词,使用两种不同的语言(相同的单词)。我现在想使用 XSL 来 link 这两个 XML 并将它们转换为 XHTML。
我现在这样做的方式,似乎只给我一个 HTML 输出。我该怎么做,我必须将 HTML 转换为 XHTML 还是直接将其转换为 XHTML 的方法?
这是我的一本字典 XML 的样子:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="dict.css"?>
<Dictionary xmlns="https://translate.google.se/m/translate?hl=sv/german">
<Language>Swedish</Language>
<Content>
<Titel>Svensk ordlista</Titel>
<Author>
<Name> Translator </Name>
</Author>
<Words wordNum ="10">
<Word ID="0">Vatten</Word>
<Word ID="1">Häst</Word>
<Word ID="2">Bil</Word>
<Word ID="3">Katt</Word>
<Word ID="4">Hund</Word>
<Word ID="5">Snö</Word>
<Word ID="6">Gata</Word>
<Word ID="7">Hus</Word>
<Word ID="8">Bord</Word>
<Word ID="9">Hand</Word>
</Words>
</Content>
</Dictionary>
这就是我的 XML linking 的样子:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="dictionary.xsl"?>
<links>
<dictLink>german.xml</dictLink>
<dictLink>Dic-swedish.xml</dictLink>
<svgLogo>svglogo.svg</svgLogo>
</links>
这就是我的 XSL 的样子:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:variable name="dictionary1">
<xsl:value-of select="/links/dictLink[1]" />
</xsl:variable>
<xsl:variable name="dictionary2">
<xsl:value-of select="/dictionaries/dictLink[2]" />
</xsl:variable>
<xsl:variable name="logo">
<xsl:value-of select="/dictionaries/svgLogo" />
</xsl:variable>
<xsl:template match="/dictionaries">
<html> <body> <xsl:value-of select="document($dic1)/Dictionary/@xml:Language"/><br/> </xsl:for-each> </body></html> </xsl:template> </xsl:stylesheet>
这可能只是部分解决方案,但您可以使用以下模板输出一些 (X)HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:de="https://translate.google.se/m/translate?hl=sv/german"
exclude-result-prefixes="fo de">
<xsl:output method="html" indent="yes" />
<xsl:template match="/links">
<html>
<body>
<xsl:for-each select="dictLink">
<xsl:copy-of select="document(.)/*[local-name()='Dictionary']" /><br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
如果将此 XSLT 命名为 dictionary.xsl
并从浏览器调用第二个 XML,它应该将 Dic-swedish.xml
(第一个 XML)的内容复制到输出。
由于您使用的是 XSLT 1.0,请参阅 https://www.w3.org/TR/1999/REC-xslt-19991116#output。
因为结果树中的文档元素 html
不在任何命名空间中,所以您得到 HTML 输出。
有关生成 XHTML 输出的 XSLT 1.0 示例,请参阅 https://www.w3.org/TR/1999/REC-xslt-19991116#section-Document-Example。其中的关键部分是:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:output
method="xml"
indent="yes"
encoding="iso-8859-1"
/>
如果您想要 DOCTYPE 声明,您可以将 xsl:output
更改为:
<xsl:output
method="xml"
indent="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
omit-xml-declaration="yes" />
就我个人而言,我不会费心将编码设置为 ISO-8859-1。如果没有 encoding
属性,您将获得 UTF-8 或 UTF-16,而且很有可能是 UTF-8。无论是UTF-8还是UTF-16,使用输出的XML系统将能够处理编码。