如何在不知道元素名称的情况下获取 xslt 中节点的名称空间 uri?

How to get the namespace-uri of a node in xslt without know element name?

我正在使用 WSO2 BPS 3.2.0,我想将元素的名称空间 URI 分配给字符串。问题是我在设计时不知道元素名称。

我有XML个数据

<message>
  <Header xmlns="http://schemas.org/Message"/>
  <Body xmlns="http://schemas.org/Message">
    <Container xmlns="http://schemas.org/Container/1.0">
      <Object>
        <document xmlns="http://schemas.org/doc/1.1">dfjgf...ash</document>
      </Object>
      <Object>
        <picture xmlns="http://schemas.org/pic/jpeg/2.0">we54uiytas...h</document >
      </Object>
    </Container>
  </Body>
</message>

我尝试使用 XSLT 转换来获得 namespace

bpel:doXslTransform("getNamespace.xsl", $Var.message/tns1:Body/tns2:Container/tns2:Object[1])

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions">
   <xsl:output method="xml"/>

   <xsl:template match="child::node[position()=1]">
     <xsl:value-of select="namespace-uri(.)"/>
   </xsl:template>

它returns没什么。
如果我使用输出方法文本,它 returns 包含在 xml 数据中的所有文本。 我哪里做错了?

以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:template match="/">
     <xsl:value-of select="namespace-uri(*/*[1])"/>
</xsl:template>

</xsl:stylesheet>

将 return 根元素的第一个子元素的命名空间。

在您的示例中,根元素是 message,其第一个子元素是 Header - 因此这里的结果将是:

http://schemas.org/Message