【问题标题】:XSLT and XSLFO namespaceXSLT 和 XSLFO 命名空间
【发布时间】: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


【解决方案1】:

@Ricky,是的,必须更改 XML。对不起。它应该看起来像这样:

<?xml version= "1.0" encoding= "ISO-8859-2"?>
<ReportContent xmlns:yt="http://www.yt.com/text/2">BLABLA<yt:picture src="pic.png"/>
</ReportContent>

【讨论】:

  • 非常感谢我会尝试改变它
猜你喜欢
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多