2013-10-28 3 views
0

У меня было ниже ввода XML.Заполнение нескольких узлов

<Body> 
<AddressInfo> 
<Address> 
<PIN>123</PIN> 
<Street>CAN</Street> 
</Address> 
<Address> 
<PIN>456</PIN> 
<Street>MAN</Street> 
</Address> 
</AddressInfo> 
</Body> 

Мой ожидается выход

<SOAPENV> 
<Header/> 
<ResponseBody> 
<AddressDetails> 
<UserPIN>123</UserPIN> 
<UserStreet>CAN</UserStreet> 
</AddressDetails> 
<AddressDetails> 
<UserPIN>456</UserPIN> 
<UserStreet>MAN</UserStreet> 
</AddressDetails> 
</ResponseBody> 
</SOAPENV> 

Моя проблема, когда я дал XPATH и извлеченные значения из XML и пытаются заселить выход. Я всегда получаю только первый набор узлов. Другие узлы игнорируются. Как я могу заполнить несколько узлов в нашем выходном мыльном конверте.

ответ

0

Вы можете использовать следующую таблицу стилей:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="@*|node()"> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:template> 

    <xsl:template match="Body"> 
     <SOAPENV> 
      <Header/> 
      <ResponseBody> 
       <xsl:apply-templates select="@*|node()" /> 
      </ResponseBody> 
     </SOAPENV> 
    </xsl:template> 

    <xsl:template match="Address"> 
     <AddressDetails> 
      <UserPIN><xsl:value-of select="PIN" /></UserPIN> 
      <UserStreet><xsl:value-of select="Street" /></UserStreet> 
     </AddressDetails> 
    </xsl:template> 
</xsl:stylesheet> 

Если вы не хотите, чтобы записать все элементы ниже AddressDetails и все эти элементы должны текст User перед ним, вы можете использовать xsl:for-each цикл вроде это:

<xsl:template match="Address"> 
    <AddressDetails> 
     <xsl:for-each select="*"> 
      <xsl:element name="User{name()}"> 
       <xsl:value-of select="." /> 
      </xsl:element> 
     </xsl:for-each> 
    </AddressDetails> 
</xsl:template> 

Просто замените другой шаблон на этот.

+0

HI forum, первый случай работал для меня, я согласился, так как он дал мне мгновенное решение. Теперь я хочу знать, как это работает. может ли кто-нибудь объяснить, что мы здесь сделали, используя шаблоны @ @ Node. Я вижу, что результат менялся, когда я менял поля. любой свободный сказать мне. ТИА. – Mano

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