如何在没有知道元素名称的情况下获取xslt中节点的namespace-uri?

时间:2016-01-18 22:04:00

标签: xml xslt wso2 wso2bps

我正在使用WSO2 BPS 3.2.0,我想将namespace-uri of element分配给string。问题是我在设计时不知道元素名称。

我有XML数据

$.getJSON("{{url_for('test')}}", {val: ui.item.value}, function(data) {
  $('#test').text(data.data);
});

我尝试使用XSLT转换来获取命名空间

<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>

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

1 个答案:

答案 0 :(得分: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