2016-07-15 3 views
0

У меня есть следующий XMLИспользуйте значение переменной в Xpath

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

я получаю имя класса внутри моего XML в узле «Classid». Я хочу получить значение «node1» класса, подобное моему значению внутри тега «classId». Я использую переменную-класс и сохраняю значение classId и пытаюсь получить значение «node1», используя переменную внутри Select Xpath. Но это не работает. Пожалуйста помоги.

+0

пытались ли вы, как этот '/ корень/Поиск/AllClass/$ класс/node1' – vinod

+0

Да уже пробовал –

+0

я думаю, что это будет работать'/root/Search/AllClass/data ($ class)/node1' – vinod

ответ

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

Ну, когда я использую статический xpath без использования переменной, я получаю значение –

+0

Спасибо, я думаю, что пространство имен было причиной того, что он не работал –

Смежные вопросы