转换为SVG文件时出现XSL命名空间问题

时间:2015-10-13 14:46:07

标签: xslt svg namespaces

我从一些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表中,但这只是给了一个&#34;已经有一个名称空间&#34;错误。

2 个答案:

答案 0 :(得分:0)

正如警告消息所示,源XML中的所有元素都在npm install gulp命名空间中,因此您需要将此命名空间绑定到样式表中的前缀

http://www.loc.gov/standards/alto/ns-v2#

然后在模板规则和XPath表达式中使用前缀,例如而不是<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#" > 您使用/alto/foo/bar。在XSLT 1.0样式表中,这是匹配命名空间中元素的唯一方法,但是因为你说你正在使用Saxon,你可以将样式表切换到XSLT 2.0并使用/a:alto/a:foo/a:bar来避免在所有地方添加前缀:

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#" > 这样的路径将匹配相关命名空间中的元素。

答案 1 :(得分:0)

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

update-package microsoft.aspnet.mvc -reinstall