Problème survenu lors de l'utilisation de SoapUI pour valider les données de réponse XML. J'ai transféré le problème à XPath Visualizer pour que je puisse résoudre les problèmes.Nœud de correspondances Xpath avec barre oblique dans les données à l'aide du prédicat
utilisant une requête XPath Je veux retourner le b: AccountActivity de noeud qui a le nœud enfant b: ActivityDescription valeur égale à '7,75000% 10/30-11-10 $ 1602' de l'extrait xml ci-dessous .
C'est ma requête XPath:
//b:AccountActivity[b:ActivityDescription = "7.75000%10/30-11/10 $1602"]
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<RetrieveAccountActivityResponse xmlns="http://tempuri.org/">
<RetrieveAccountActivityResult xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:key xmlns:b="http://schemas.datacontract.org/2004/07/IntegratorSuite.DataContracts">
<b:CurrentPage>0</b:CurrentPage>
<b:Direction>Ascending</b:Direction>
<b:PageSize>50</b:PageSize>
<b:SortByParameter i:nil="true"/>
<b:TotalEntries>4</b:TotalEntries>
<b:TotalPages>1</b:TotalPages>
</a:key>
<a:value xmlns:b="http://schemas.datacontract.org/2004/07/IntegratorSuite.DataContracts">
<b:AccountActivity>
<b:AccountNumber>11111111</b:AccountNumber>
<b:AccountType>2</b:AccountType>
<b:ActivityDescription>7.75000%10/30-11/10 $1602</b:ActivityDescription>
<b:Amount>4.1200000000</b:Amount>
<b:CallPut_HasValue>false</b:CallPut_HasValue>
<b:CallPut_Value>ALL</b:CallPut_Value>
<b:CmpQualCode i:nil="true"/>
<b:Currency>USD</b:Currency>
<b:Cusip></b:Cusip>
<b:Description1/>
<b:Description2/>
<b:EntryType>DC</b:EntryType>
<b:ExpirationDate>9999-12-31T23:59:59.9999999</b:ExpirationDate>
<b:JournalDescription i:nil="true"/>
<b:NetAmount>-4.1200000000</b:NetAmount>
<b:Price>0.000000</b:Price>
<b:PrincipalAmount>-4.1200000000</b:PrincipalAmount>
<b:Quantity>0.000000</b:Quantity>
<b:RecordType>H</b:RecordType>
<b:RootSymbol i:nil="true"/>
<b:SecQualCode i:nil="true"/>
<b:SecurityDescription>Cash</b:SecurityDescription>
<b:SecurityGroupCategoryID>0</b:SecurityGroupCategoryID>
<b:SecurityGroupDescription i:nil="true"/>
<b:SecurityQuantityConversion>0</b:SecurityQuantityConversion>
<b:SecurityTypeCode i:nil="true"/>
<b:StockConversionFactor>0</b:StockConversionFactor>
<b:StrikePrice>0.0</b:StrikePrice>
<b:Symbol/>
<b:SymbolCusip i:nil="true"/>
<b:TableID i:nil="true"/>
<b:TradeDate_HasValue>true</b:TradeDate_HasValue>
<b:TradeDate_Value>2010-11-11T00:00:00</b:TradeDate_Value>
<b:TradeDetailID_HasValue>false</b:TradeDetailID_HasValue>
<b:TradeDetailID_Value>0</b:TradeDetailID_Value>
<b:TradeNumber i:nil="true"/>
<b:TransactionType>Interest Collected</b:TransactionType>
<b:UnderlyingCusip i:nil="true"/>
<b:UnderlyingSymbol i:nil="true"/>
</b:AccountActivity>
<b:AccountActivity>
...
Il semble que la barre oblique de la valeur du nœud est ce qui est à l'origine du match à l'échec. Si je supprime ceux de la requête xml et xpath, j'obtiens une correspondance. Y a-t-il un problème avec les barres obliques correspondantes dans les valeurs de noeud? On dirait une question fondamentale mais je ne trouve pas de réponse.
C'est un peu étrange, n'est-ce pas? Je ne pense pas que xpath ait un moyen d'échapper au contenu des chaînes autres que les citations (que vous devez doubler). Est-ce que cela fonctionne: '//b:AccountActivity[b:ActivityDescription.text()="7.75000%10/30-11/10 $ 1602"] '? Je ne pense pas que cela devrait faire la différence, mais ça vaut le coup d'essayer. –
@allen: la barre oblique littérale n'a rien à voir avec votre problème. Votre expression XPath a la syntaxe riht. Peut-être que le problème est dans le code que vous n'avez pas fourni. Les préfixes de namespaces sont-ils liés à l'URI de l'espace de nom de droite? –
@Andrew - oui j'ai essayé des guillemets en vain. – allen