SAXON忽略源XML中的名称空间

时间:2019-01-17 22:34:44

标签: xml xslt namespaces saxon

环境: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 个答案:

答案 0 :(得分: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">