2016-12-02 6 views
0

Мне нужно преобразовать следующее содержаниеLooping элемент для одного элемента в XSLT

<QTLS_ITEM> 
     <ID>123</ID> 
     <ID1>1345</ID1> 
     <SERAIL_NUMBER>1026977­04257</SERAIL_NUMBER> 
    <PROD_NAME>upgrade</PROD_NAME> 
    </QTLS_ITEM> 
    <QTLS_ITEM> 
     <ID>123</ID> 
     <ID1>1345</ID1> 
     <SERAIL_NUMBER>1026977­04257</SERAIL_NUMBER> 
     <PROD_NAME>Plug­in</PROD_NAME> 
    </QTLS_ITEM> 
    <QTLS_ITEM> 
     <ID>123</ID> 
     <ID1>1345</ID1> 
     <SERAIL_NUMBER>1026977­04257</SERAIL_NUMBER> 
     <PROD_NAME>License</PROD_NAME> 
    </QTLS_ITEM> 

Это зацикливание тип элемента. <QTLS_ITEM> является повторяющимся элементом. Для каждого элемента я должен конкатенировать эти два поля и получить значение, как показано ниже.
Я хочу, чтобы превратить его в единый элемент, как

<Item_description> 
1026977­04257 upgrade 
1026977­04257 Plug­in 
1026977­04257 License 
<Item_Description> 

Что означает, что нужно сцепить как SERAIL_NUMBER и PROD_NAME.
Может ли кто-нибудь помочь в этом?

<xsl:template name="string-join"> 
    <xsl:param name="nodes"/> 
    <xsl:param name="delimiter"/> 
    <xsl:for-each select="$nodes"> 
    <xsl:value-of select="."/> 
    <xsl:if test="$nodes[position()!=last()-1]"> 
     <xsl:value-of select="$delimiter"/> 
    </xsl:if> 
    </xsl:for-each> 
</xsl:template> 

Я использую это, чтобы получить порядковые номера, разделенные запятой. Но я хочу объединить и получить результат в вышеуказанном формате.

Ответ на моем случае

<xsl:template name="join"> 
    <xsl:param name="list"/> 
    <xsl:param name="separator"/> 
    <xsl:for-each select="db:SERAIL_NUMBER | db:PROD_NAME">($list value) 
     <xsl:value-of select="."/> 
     <xsl:if test="position() != last()"> 
     <xsl:value-of select="$separator"/> 
     </xsl:if> 
    </xsl:for-each> 
    </xsl:template> 
+0

Вы уверены, что вы можете использовать XSLT 2.0? Если да, зачем помечать вопрос XSLT 1.0? Кроме того, я не уверен, что означает «тип элемента looping». Вы группируете элементы 'QTLS_ITEM' с помощью' SUMMARY_ID'? –

+0

Я изменил вопрос. Может, посмотрите сейчас. –

ответ

-1

Это работает в моем случае

<xsl:template name="join"> 
    <xsl:param name="list"/> 
    <xsl:param name="separator"/> 
    <xsl:for-each select="db:SERAIL_NUMBER|db:PROD_NAME">($list value) 
     <xsl:value-of select="."/> 
     <xsl:if test="position() != last()"> 
     <xsl:value-of select="$separator"/> 
     </xsl:if> 
    </xsl:for-each> 
    </xsl:template> 
+0

Это делает не работает с размещенным вводом. И он не вернет указанный результат. –

+0

Он работает для меня в oracle soa xslt –

+0

Если я использую запятую внутри select, он возвращает все значения цикла. Не для одного цикла qtls_item –

1

вход, который вы показываете нам не очень хорошо сформированный XML, потому что не имеет один корневой элемент. Учитывая хорошо сформированный XML ввода, такие как:

XML

<root> 
    <QTLS_ITEM> 
     <SERAIL_NUMBER>102697704257</SERAIL_NUMBER> 
     <PROD_NAME>upgrade</PROD_NAME> 
    </QTLS_ITEM> 
    <QTLS_ITEM> 
     <SERAIL_NUMBER>102697704257</SERAIL_NUMBER> 
     <PROD_NAME>Plugin</PROD_NAME> 
    </QTLS_ITEM> 
    <QTLS_ITEM> 
     <SERAIL_NUMBER>102697704257</SERAIL_NUMBER> 
     <PROD_NAME>License</PROD_NAME> 
    </QTLS_ITEM> 
</root> 

вы можете сделать просто:

XSLT 2,0

<xsl:stylesheet version="2.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="/root"> 
    <Item_description> 
     <xsl:for-each select="QTLS_ITEM"> 
      <xsl:value-of select="SERAIL_NUMBER, PROD_NAME" /> 
      <xsl:text>&#10;</xsl:text> 
     </xsl:for-each> 
    </Item_description> 
</xsl:template> 

</xsl:stylesheet> 

получить:

Результат

<?xml version="1.0" encoding="UTF-8"?> 
<Item_description>102697704257 upgrade 
102697704257 Plugin 
102697704257 License 
</Item_description> 
+0

Это не работает .... Я обновил вопрос .. Пожалуйста, посмотрите на него. –

+0

@srinivaskalyan Вы можете видеть, что он * работает здесь: http://xsltransform.net/gWEamLn –

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