【发布时间】:2011-09-09 10:54:43
【问题描述】:
XSL 命名空间存在以下问题。我使用 FOP 生成 PDF,其中包含一个 XSL 文件和一个 XML 文件。
这是我的 XML 文件:
<?xml version= "1.0" encoding= "ISO-8859-2"?>
<ReportContent>BLABLA<yt:picture src="pic.png"/></ReportContent>
这是我的 XSL 文件:
<?xml version="1.0" encoding="ISO-8859-2"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:yt="http://www.yt.com/text/2"
>
<xsl:template match="/">
<fo:root >
[...]
<fo:flow >
<fo:block> <xsl:apply-templates select='ReportContent'> </xsl:apply-templates></fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
我需要包含命名空间 yt:。当我像这样在 xml 中执行此操作时:
<?xml version= "1.0" encoding= "ISO-8859-2"?>
<ReportContent xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:yt="http://www.yt.com/text/2">
BLABLA<yt:picture src="pic.png"/>
</ReportContent>
效果很好。
但在现实生活中,我无法将命名空间添加到我的 xml(创建 xml 的方式不允许这样做)。
所以我尝试只在xsl上写,但它根本不起作用。(我试图将它添加到xsl中的每个标签,但它不起作用)。
我不明白整个命名空间的工作原理......
你能帮我找到在 xsl 中放置命名空间的位置,这样我就不会收到任何错误。
希望我的问题很清楚
提前致谢。
【问题讨论】:
-
您拥有的 XML 文档在命名空间方面不是格式良好的 XML:它使用
yt:前缀而不声明它。所以不能成功处理 XML 文件不是 XSLT 的错。你用什么来创建允许使用命名空间前缀但不允许你创建它们的 XML 文件? -
“创建它们”是指“声明它们”。
-
如果我理解得很好,如果 xml 使用命名空间 yt:,则声明必须在 xml 中,否则不能?
-
实际上我正在使用一个生成 xml 的程序,但这个程序是一个“黑匣子”。如果我真的必须在 xml 中编写声明,我可以这样做,但是更改 xml 比更改 xsl 需要更多时间。
-
正如您提到的,不了解整个命名空间是如何工作的……我的经验是,XML 命名空间是一个真正值得深入了解的领域。 (翻译:理解薄弱会导致无休止的痛苦挣扎。)值得花一些时间来学习命名空间的工作原理。您可以选择您喜欢的教程;这里有一对看起来不错的:jclark.com/xml/xmlns.htm, xml.com/pub/a/1999/01/namespaces.html
标签: xml xslt namespaces xml-namespaces xsl-fo