SAXON 忽略源 XML 中的命名空间 [重复]
Posted
技术标签:
【中文标题】SAXON 忽略源 XML 中的命名空间 [重复]【英文标题】:SAXON ignore namespace in source XML [duplicate] 【发布时间】:2019-06-12 04:53:44 【问题描述】:环境:Java:8,Saxon-HE:9.9.0-2
我的情况是我认为微不足道的,但是我无法得到令人满意的结果
源 xml 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="mcf.xsl"?>
<mcf xmlns="http://example.com/#mcf"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://example.com/#mcf">
...
我写了 xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0" >
<xsl:output method="text" omit-xml-declaration="yes" indent="yes" media-type="text/csv" exclude-result-prefixes="#all" escape-uri-attributes="yes"/>
<xsl:template match="/" name="initial">
<xsl:variable name="md" select="./mcf/md"/>
<xsl:for-each select="$md/mi/mv">
<xsl:variable name="mii" select="substring-after(../@mii,'pg=')"/>
<xsl:variable name="ji" select="../job/@jobId"/>
<xsl:variable name="gpd" select="../gp/@d"/>
<xsl:variable name="gpet" select="../gp/@et"/>
<xsl:call-template name="mv">
<xsl:with-param name="mii" select="$mii"/>
<xsl:with-param name="ji" select="$ji"/>
<xsl:with-param name="gpd" select="$gpd"/>
<xsl:with-param name="gpet" select="$gpet"/>
</xsl:call-template>
<xsl:value-of select="$newline"/>
</xsl:for-each>
</xsl:template>
不幸的是,结果是空的。如果我从“mcf”中删除 atrybut 一切正常。
我尝试使用:
<xsl:copy copy-namespaces="no" inherit-namespaces="no">
但是,没有结果。
【问题讨论】:
【参考方案1】:命名空间声明不是属性。
由于你的源 XML 有一个 默认命名空间,你必须告诉你的样式表使用它:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xpath-default-namespace="http://example.com/#mcf"
exclude-result-prefixes="xs">
【讨论】:
不可能这么简单:D 事情并不总是那么简单:jenitennison.com/2007/07/01/… 我花了三天时间,使用 Apache 转换器一切正常,但性能并没有让我平静。我重写了 XSL,将库更改为 Saxona 工作得更快,但我无法解决这个问题。非常感谢。 您会(或至少应该)在使用任何 XSLT 处理器时都会遇到同样的问题。但是,上述解决方案只有在处理器支持 XSLT 2.0 时才能工作。在 XSLT 1.0 中,您必须使用前缀:***.com/questions/34758492/…以上是关于SAXON 忽略源 XML 中的命名空间 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如果 Saxon 在 CLASSPATH 上,则无法识别命名空间的 XPath 表达式失败
python对于操作xml 忽略命名空间 处理解析修改xml