2

我正在使用 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 转换来获取命名空间

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>

它什么也不返回。
如果我使用输出方法 text 它会返回 xml 数据中包含的所有文本。我在哪里做错了?

4

1 回答 1

3

以下样式表:

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>

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

在您的示例中,根元素是message并且它的第一个子元素是Header- 所以这里的结果将是:

http://schemas.org/Message
于 2016-01-18T22:43:57.143 回答