【问题标题】:XSL namespace issues when transforming to an SVG file转换为 SVG 文件时的 XSL 命名空间问题
【发布时间】:2015-10-13 14:46:07
【问题描述】:

我正在从一些 alto xml 文件制作一个简单的 SVG 文件。除了烦人的命名空间问题外,我都可以使用它。

源 xml 的标头(我不应该更改)是

    <alto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.loc.gov/standards/alto/ns-v2#" 
    xsi:schemaLocation="http://www.loc.gov/standards/alto/ns-v2# http://www.loc.gov/standards/alto/alto-v2.0.xsd" 
    xmlns:xlink="http://www.w3.org/1999/xlink"
    >

以及我的 xsl 的标题(如果我们能解决这个问题,我很乐意更改)

<xsl:stylesheet version="1.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns="http://www.w3.org/2000/svg"
   >

这两件事结合起来造成了撒克逊错误:

严重性:警告 说明:SXXP0005:源文档在命名空间http://www.loc.gov/standards/alto/ns-v2#,但所有模板规则都匹配没有命名空间的元素 网址:http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/trans/SaxonErrorCode.html#SXXP0005

如果我从源代码中删除xmlns="http://www.loc.gov/standards/alto/ns-v2#" 行,我的转换工作就完美了……但我不想为了让这个脚本工作而修改和取消修改数百个这些文件。所以我真的需要一个可以修复 xsl 的更改。我尝试将 alto 行添加到 xsl 工作表中,但这只会给出“已经有命名空间”错误。

【问题讨论】:

    标签: xslt svg namespaces


    【解决方案1】:

    正如警告消息所示,源 XML 中的所有元素都在 http://www.loc.gov/standards/alto/ns-v2# 命名空间中,因此您需要将此命名空间绑定到样式表中的 前缀

    <xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xmlns="http://www.w3.org/2000/svg"
       xmlns:a="http://www.loc.gov/standards/alto/ns-v2#"
       >
    

    然后在模板规则和 XPath 表达式中使用前缀,例如而不是/alto/foo/bar,你会使用/a:alto/a:foo/a:bar。在 XSLT 1.0 样式表中,这是匹配命名空间中元素的唯一方法,但既然您说您使用的是 Saxon,您可以将样式表切换到 XSLT 2.0 并使用 xpath-default-namespace 以避免必须在任何地方添加前缀:

    <xsl:stylesheet version="2.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xmlns="http://www.w3.org/2000/svg"
       xpath-default-namespace="http://www.loc.gov/standards/alto/ns-v2#"
       >
    

    有了这个,/alto 之类的路径将匹配相关命名空间中的元素。

    【讨论】:

    • 完美解决了我的问题,非常感谢!
    【解决方案2】:

    你还没有向我们展示你的任何模板,而撒克逊警告是关于模板的,但我认为你想使用

    <xsl:stylesheet version="2.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xmlns="http://www.w3.org/2000/svg"
       xpath-default-namespace="http://www.loc.gov/standards/alto/ns-v2#"
       >
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      相关资源
      最近更新 更多