Je travaille sur une exigence où je dois retourner le nom et la valeur de l'élément en tant que paire valeur/clé en utilisant XQUERY.Renvoie le nom et la valeur de l'élément en tant que paire valeur/clé
[code = 123, px_last = attribut de valeur des premières données, attribut last_update = valeur de 2ème données et ainsi de suite]
Il y a 7 élément de données avec la valeur d'attribut à l'intérieur doit être lu comme ci-dessus avec le premier champ mappé à la première donnée et la deuxième à l'attribut de deuxième valeur de données. etc ..
Avec votre aide, j'ai pu générer la sortie mais ils nous ont frappé là où je dois cartographier le premier élément de champ pour les premières données valeur de l'attribut et ainsi de suite, etc.
Merci à l'avance
fichier XML:
<root>
<fields>
<field>PX_LAST</field>
<field>LAST_UPDATE</field>
<field>LAST_UPDATE_DT</field>
<field>SECURITY_DES</field>
<field>FUT_CUR_GEN_TICKER</field>
<field>YLD_CNV_BID</field>
<field>YLD_CNV_ASK</field>
</fields>
<Datas>
<Data>
<code>0</code>
<ins>
<id>CT30</id>
<key>Govt</key>
<ins/>
<data value="98.843750"/>
<data value="16:14:45">
</data>
<data value="06/03/2014"/>
<data value="T 3 3/8 05/15/44"/>
<data value=""/>
<data value="3.439"/>
<data value="3.437"/>
</Data>
<Data>
<code>0</code>
<ins>
<id>US0001W</id>
<key>Index</key>
<ins/>
<data value=".119000"/>
<data value="06:46"/>
<data value="06/03/2014"/>
<data value="ICE LIBOR USD 1 Week"/>
<data value=""/>
<data value="N.A."/>
<datavalue=".11900"></data>
</Data>
</Datas>
</root>
XQuery:
declare function xf:strip-namespace($e as element())
as element()
{
element { xs:QName(local-name($e)) }
{
for $child in $e/(@*,node())
return
if ($child instance of element())
then
xf:strip-namespace($child)
else
$child
}
};
let $nl := " "
let $count := 0
for $x in doc("test.xml")/soap:Envelope/soap:Body/dlws:retrieveGetDataResponse/dlws:instrumentDatas//*
let $y:=xf:strip-namespace($x)
return
if($y/name() = 'instrumentData')
then
concat($nl,'[','')
else if($y/name()='data')
then
concat($y/name(),'=',$y/data(@value),',')
else if($y/name() != 'instrument')
then
concat($y/name(),'=',$y/text(),',')
else
()
Sortie en ce moment:
[code = 123, données = werr, données = "qwe", données = "wer", ......,] [code = 456, data = rty, data = "tyuu", data = "uuu", ......,]
Merci beaucoup pour votre aide. J'ai appris une nouvelle chose aujourd'hui. –