如何在不知道元素名称的情况下获取 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
我正在使用 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