首页 > 解决方案 > 错误消息“adc”是一个未声明的命名空间

问题描述

所有,我对 XSLT 比较陌生,但已经做了一些解决方案。目前我正在尝试编写一个 xslt,它根据 if 将文件移动到不同的文件夹

<adc:Status>uploaded</adc:Status> 

是否“上传”。

尽管声明了 xmlns:adc 命名空间,但我得到了错误

在使用 XSLT 2.0 (SaxonHe) 的 TransForm 期间发生异常:System.Xml.XmlException:'adc' 是未声明的命名空间。第 2 行,第 4 位。

我花了几个小时寻找错误消息,试图让自己进入命名空间,但目前我似乎无法找出错误的原因。

这是我写的xslt

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:adc="http://www.ifra.com/adconnexion/#v2"
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
exclude-result-prefixes="xs xsi adc">
<xsl:output method="xml" encoding="ISO-8859-1" indent="yes"/>
    <xsl:template match="/">
        <xsl:for-each select="/">
            <xsl:variable name="Filename">
                <xsl:value-of select="replace(document-uri(.), '.*/', '')"/>
            </xsl:variable>
            <xsl:choose>
                <xsl:when test="/adc:adConnexion/adc:Requests/adc:AdOrder/adc:ProductionDetail/adc:Material/adc:Status='uploaded'">
                    <!-- Business case -->
                    <xsl:variable name="OutputFileName" select="concat('file:///C:\UPLOADED\',$Filename)"/>
                    <xsl:result-document href="{$OutputFileName}">
                        <xsl:copy-of select="current()"/>
                    </xsl:result-document>
                </xsl:when>
                <xsl:otherwise>
                    <!-- Non Business case -->
                    <xsl:variable name="OutputFileName" select="concat('file:///C:\ELSE\',$Filename)"/>
                    <xsl:result-document href="{$OutputFileName}">
                        <xsl:copy-of select="current()"/>
                    </xsl:result-document>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

简化的输入文件是

<adc:adConnexion xmlns:adc="http://www.ifra.com/adconnexion/#v2">
  <adc:Requests>
    <adc:AdOrder messageClass="BusinessTransaction" messageID="FEA*" bookingID="1234" messageCode="AD-O">
      <adc:ProductionDetail>
        <adc:Material>
            <adc:Status>uploaded</adc:Status>
        </adc:Material>
    </adc:AdOrder>
  </adc:Requests>
</adc:adConnexion>

任何帮助是极大的赞赏!

标签: xslt-2.0xml-namespaces

解决方案


推荐阅读