将节点与命名空间匹配

时间:2021-06-12 01:27:23

标签: xslt

我有这个原始的 xml:

<Document xmlns="http://schema.infor.com/InforOAGIS/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schema.infor.com/InforOAGIS/2 http://schema.infor.com/2.12.x/InforOAGIS/BODs/SyncCaptureDocument.xsd" releaseID="9.2" versionID="2.12.2">
    <Application>
        <Sender>
            <LogicalID>lid://infor.daf.1</LogicalID>
            <Code>OnError</Code>
        </Sender>
        <CreationDateTime>2021-06-10T23:07:36.193Z</CreationDateTime>
    </Application>
</Document>

到目前为止我的 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:ns0="http://schema.infor.com/InforOAGIS/2 http://schema.infor.com/2.12.x/InforOAGIS/BODs/SyncCaptureDocument.xsd"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:output method="xml" indent="yes" html-version="5"/>

  <xsl:template match="/">
        <Transaction xmlns="http://schema.infor.com/InforOAGIS/2"
                     languageCode="en-US"
                     releaseID="9.2"
                     systemEnvironmentCode="Production"
                     versionID="2.8.0">
            
            <ApplicationArea>
                <Sender>
                    <LogicalID>
                        <xsl:value-of select="ns0:Document/ns0:Application/ns0:Sender/ns0:LogicalID"/>
                    </LogicalID>
                    <Code>Add</Code>
                </Sender>
                <CreationDateTime>2021-06-10T23:07:36.193Z</CreationDateTime>
            </ApplicationArea>
            
        </Transaction>
    
  </xsl:template>
  
</xsl:stylesheet>

我无法将 <LogicalID> 节点与上面的代码匹配。我认为这是因为命名空间。 任何帮助表示赞赏。链接到 xslt:https://xsltfiddle.liberty-development.net/eieFA13/1

1 个答案:

答案 0 :(得分:0)

XSLT 中的命名空间声明是错误的,请参阅 https://xsltfiddle.liberty-development.net/eieFA13/2 中的修复以仅绑定命名空间名称(例如 xmlns:ns0="http://schema.infor.com/InforOAGIS/2")或 https://xsltfiddle.liberty-development.net/eieFA13/3 以通过使用 xpath-default 来简化任务-命名空间(例如 xpath-default-namespace="http://schema.infor.com/InforOAGIS/2")。

另一方面,这听起来更像是您想要更改 Sender/Code 元素:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xpath-default-namespace="http://schema.infor.com/InforOAGIS/2"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="Sender/Code">
      <xsl:copy>Add</xsl:copy>
  </xsl:template>  
  
</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/eieFA13/4