从命名空间获取节点名称



这是我的xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:end="http://endpoint.ggg.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <end:onlineExpressRemit>
      <channelCode>NBPS</channelCode>
      </end:onlineExpressRemit>
   </soapenv:Body>
    </soapenv:Envelope>

这是我的XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:end="http://endpoint.ggg.com/" >
    <xsl:template match="/">
<xsl:value-of name="ggg2" select="/soapenv:Envelope/soapenv:Body/*[namespace-uri()]"/>
    </xsl:template>
</xsl:stylesheet>

我期望的输出是只显示

onlineExpressRemit

我对xslt非常陌生,我尝试了name(), local-name()很多其他方法,但是没有运气,我不能只检索节点名称,任何帮助都会做,谢谢!

您可以尝试使用local-name(soapenv:Envelope/soapenv:Body/*),例如,下面的XSL转换:

<xsl:stylesheet version="1.0" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:end="http://endpoint.ggg.com/" >
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <xsl:element name="root">
            <xsl:value-of select="local-name(soapenv:Envelope/soapenv:Body/*)"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

应用于XML示例时,产生以下输出:

<root>onlineExpressRemit</root>

注意:我添加<root>元素只是因为在我用于测试的在线XSLT处理器中,根元素缺席时会出现错误。通常,设置<xsl:output>足以输出非xml结果:XSLT:转换为非xml内容?

相关内容

  • 没有找到相关文章

最新更新