使用XSL将XML转换为XHTML

时间:2018-10-17 21:12:33

标签: xml xslt xhtml

我有两个XML文件,其中包含两个字典,两个字典中的10个单词用两种不同的语言(相同的单词)。我现在想使用XSL链接这两个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链接的样子:

<?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>

2 个答案:

答案 0 :(得分:0)

这可能只是部分解决方案,但是您可以使用以下模板输出一些(X)HTML:

library(shiny)

fluidPage(
    titlePanel("Old Faithful Geyser Data"),
    sidebarLayout(
        sidebarPanel(
            sliderInput("slow_bins",
                        "Number of slow bins:",
                        min = 1,
                        max = 50,
                        value = 30),
            sliderInput('fast_bins',
                        'fast bins',
                        min = 1,
                        max = 50,
                        value = 30)
        ),
        mainPanel(
            plotOutput("slow_dist_plot"),
            plotOutput("fast_dist_plot")
        )
    )
)

如果您将此XSLT命名为<?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> ,并从浏览器中调用第二个XML,它应该将dictionary.xsl(第一个XML)的内容复制到输出中。

答案 1 :(得分:0)

由于您使用的是XSLT 1.0,请参见Result

由于结果树中的document元素在没有命名空间的情况下是/* removing the old generated source files */ rm -rf var/di var/generation /* generate new source files */ php bin/magento setup:di:compile ,因此您将获得HTML输出。

有关生成XHTML输出的XSLT 1.0示例,请参见https://www.w3.org/TR/1999/REC-xslt-19991116#output。其中的关键部分是:

html

如果要使用DOCTYPE声明,可以将<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" /> 更改为:

xsl:output

我个人不会将编码设置为ISO-8859-1。没有<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" /> 属性,您将获得UTF-8或UTF-16,而且很有可能是UTF-8。无论是UTF-8还是UTF-16,使用输出的XML系统都将能够处理编码。