我正在尝试将一些xml文件放在一起,并使用xslt转换在xhtml中输出它们。我通过指定一个名为index.xml的xml文件来实现它,我在其中定义了我需要使用的其他文件,如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="merge.xsl"?>
<dic:dictionary xmlns:dic = "dictionary">
<dic:Logo>Logo</dic:Logo>
<dic:Author>User Name</dic:Author>
<dic:EnglishWords>english</dic:EnglishWords>
<dic:SwedishTranslation>swedish</dic:SwedishTranslation>
<dic:SwedishWords>swedish</dic:SwedishWords><br/>
<dic:EnglishTranslation>english</dic:EnglishTranslation>
</dic:dictionary>
然后在我的转换中,我有一个这样的徽标的模板声明:
<!--Logo-->
<xsl:template match = "dic:index//Logo">
<html>
<head>
<link rel="stylesheet" type="text/css" href="Style.css" />
</head>
<body>
<div id = "Logo">
<xsl:apply-templates select="document(concat(.,'.svg'))"/>
</div>
</body>
<xsl:apply-templates/>
</html></xsl:template>
svg文件本身如下所示:
<?xml version="1.0" standalone="no"?>
<?xml-stylesheet href="Style.css" type="text/css"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
width="180px" height="70px" viewBox="0 0 180 70"
enable-background="new 0 0 180 70" xml:space="preserve"
preserveAspectRatio="xMinYMin meet">
<line fill="none" stroke="#000000" x1="0" y1="71.533" x2="35.036" y2="5.109"/>
<line fill="none" stroke="#000000" x1="91.971" y1="15.767" x2="91.971" y2="71.533"/>
<line fill="none" stroke="#000000" x1="146.357" y1="5.109" x2="177.372" y2="71.533"/>
<line fill="none" stroke="#000000" x1="0" y1="71.533" x2="177.372" y2="71.533"/>
<line fill="none" stroke="#000000" x1="17.518" y1="58.108" x2="82.481" y2="58.108"/>
<line fill="none" stroke="#000000" x1="101.459" y1="58.108" x2="161.866" y2="58.108"/>
<line fill="none" stroke="#000000" x1="82.481" y1="58.108" x2="91.971" y2="71.533"/>
<line fill="none" stroke="#000000" x1="101.459" y1="58.108" x2="91.971" y2="71.533"/>
</svg>
然而,虽然这种方法适用于其他xml文件,但它不适用于此svg文件,作为输出我只得到单词Logo。我一直在四处寻找,但我没有看到如何做到这一点的好例子。此外,当我尝试应用css样式表时,我有以下
#Logo{
width: 300px ;
margin-left: auto ;
margin-right: auto ;
}
它也不起作用......如何让css工作......?
有任何关于此的帮助或信息将不胜感激。
非常感谢。
答案 0 :(得分:0)
为什么不简单<xsl:copy-of select="document(concat(., '.svg'))"/>
而不是apply-templates
?或者您想以某种方式转换SVG?目前尚不清楚SVG文档的路径或文件名在何处包含在XML输入示例中。
答案 1 :(得分:0)
请试试这个:
<!--Logo-->
<xsl:template match = "dic:dictionary/dic:Logo">
<html>
<head>
<link rel="stylesheet" type="text/css" href="Style.css" />
</head>
<body>
<div id = "Logo">
<xsl:copy-of select="document(concat(.,'.svg'))/*"/>
</div>
</body>
</html>
</xsl:template>
您需要删除末尾的<xsl:apply-templates>
(这是复制“徽标”文本的内容),并使用<xsl:copy-of>
复制SVG文件的内容。