我有以下XML
<root>
<ns:Search xmlns:ns="http://example.com/1.0/">
<ns:AllClass>
<ns:class1>
<ns:node1>fhgfjh</ns:node1>
<ns:node2>Aprtyrtyril</ns:node2>
<ns:node3>Juklyuiyly</ns:node3>
</ns:class1>
<ns:class2>
<ns:node1>dfgd</ns:node1>
<ns:node2>trytyu</ns:node2>
<ns:node3>sgsdfg</ns:node3>
</ns:class2>
.
.
.
.
.
.
</ns:AllClass>
</ns:Search>
<ns:Req xmlns:ns="http://example.com/1.0/">
<ns:classId>class1</ns:classId>
<ns:othertag>asdfg</ns:othertag>
.
.
.
.
.
</ns:Req>
</root>
以及以下XSL
<xsl:template match="root">
<xsl:variable name="class" select="/root/Req/classId" />
<ns1:Request xmlns:ns1="http://example.com/ns1">
<ns1:node>
<xsl:value-of xmlns:ns="http://example.com/1.0/" xmlns:ns1="http://abc.xyz.com/1.0/" select="/root/Search/AllClass[Value=$class]/node1" />
</ns1:node>
</ns1:Request>
</xsl:template>
我在'classId'节点的XML中获取了一个类名。我希望类的'node1'的值与'classId'标记内的值相同。我正在使用变量'class'并存储classId的值,并尝试通过使用Select Xpath中的变量来获取'node1'的值。但它没有用。请帮忙。
答案 0 :(得分:1)
您必须在XPATH表达式中使用命名空间:
<xsl:template match="root">
<xsl:variable name="class_tmp" xmlns:ns="http://example.com/1.0/" select="/root/ns:Req/ns:classId" />
<xsl:variable name="class" select="concat('ns:',$class_tmp)" />
<xsl:message><xsl:value-of select="$class"/></xsl:message>
<ns1:Request xmlns:ns1="http://example.com/ns1">
<ns1:node>
<xsl:value-of xmlns:ns="http://example.com/1.0/" xmlns:ns1="http://abc.xyz.com/1.0/" select="/root/ns:Search/ns:AllClass/*[name()=$class]/ns:node1" />
</ns1:node>
</ns1:Request>
</xsl:template>