2016-03-15 12 views
-1

У меня есть следующий XML из API вызова Rest:XML Extract дочерние элементы как элементы

<opens type="array"> 
<open> 
    <account-id>123</account-id> 
    <campaign-id type="integer">10000</campaign-id> 
    <contact-id type="integer">302315</contact-id> 
    <browser>Other</browser> 
    <recorded-at type="dateTime">2016-03-12T12:52:07-05:00</recorded-at> 
    <contact> 
    <id type="integer">302315</id> 
    <email>[email protected]</email> 
    <memberid>1255252</memberid> 
    </contact> 
</open> 
<open> 
    <account-id>123</account-id> 
    <campaign-id type="integer">10000</campaign-id> 
    <contact-id type="integer">302326</contact-id> 
    <browser>Other</browser> 
    <recorded-at type="dateTime">2016-03-13T12:52:07-05:00</recorded-at> 
    <contact> 
    <id type="integer">302326</id> 
    <email>[email protected]</email> 
    <memberid>1255248</memberid> 
    </contact> 
</open> 
</opens> 

и я пытаюсь получить это как выход

<opens type="array"> 
<open> 
    <account-id>487</account-id> 
    <campaign-id type="integer">504084</campaign-id> 
    <contact-id type="integer">396056515</contact-id> 
    <browser>Other</browser> 
    <recorded-at type="dateTime">2016-03-12T12:52:07-05:00</recorded-at> 
    <contact-id type="integer">396056515</id> 
    <email>[email protected]</email> 
    <memberid>145773617</memberid> 
</open> 
<open> 
    <account-id>123</account-id> 
    <campaign-id type="integer">10000</campaign-id> 
    <contact-id type="integer">302326</contact-id> 
    <browser>Other</browser> 
    <recorded-at type="dateTime">2016-03-13T12:52:07-05:00</recorded-at> 
    <contact-id type="integer">302326</id> 
    <email>[email protected]</email> 
    <memberid>1255248</memberid> 
</open> 
</opens> 

Что должен мой XSLT выглядеть ? Контактный элемент появится только один раз внутри каждого открытого элемента. Иногда не может быть никакого открытого элемента. Я вижу несколько примеров на этом сайте, которые похожи, но не могли точно понять это.

Спасибо, Ранчи

ответ

0

Я думаю, я нашел ответ. Когда я использую следующий XSLT, он загружает его правильно.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:template match="*"> 
    <xsl:element name="{name()}"> 
    <xsl:copy-of select="@*"/> 
    <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 
<xsl:template match="//contact"> 
    <xsl:apply-templates/> 
</xsl:template> 
</xsl:stylesheet> 

Пожалуйста, приложите любое лучшее или более эффективное решение.

Thanks, Ranchi