2016-05-24 2 views
0

Dans le message XML ci-dessous je peux obtenir 'AccountNumber' en utilisantXPath renvoie la valeur en C# utilité mais pas dans la forme d'expression dans Biztalk

//*[local-name()='AccountNumber']/text() 

ou

/*[local-name()='GetFullAxxAccountNoResponse']/*[local-name()='GetFullAxxAccountNoResult']/*[local-name()='FullAxxAccNo']/*[local-name()='FullAxxAccountNo']/*[local-name()='AccountNumber'] 

Cela fonctionne bien dans un C# essai application ou dans le plugin XPath Notepad ++, mais il ne renvoie rien quand il est utilisé dans une forme d'expression BizTalk, quelqu'un peut-il aider à étoffer cela? J'ai aussi essayé d'inclure l'espace de noms dans le nœud de niveau supérieur mais je n'ai pas eu de chance.

expression code forme:

vAccount = xpath(mymessage.body, "either one of the xpath statements above") 

Instance:

<GetFullAxxAccountNoResponse xmlns="http://temp.org/"> 
    <GetFullAxxAccountNoResult> 
     <FullAxxAccNo> 
      <FullAxxAccountNo> 
       <AccountNumber>123456</AccountNumber> 
      </FullAxxAccountNo> 
     </FullxxAccNo> 
    <SuccessFlag>success</SuccessFlag> 
    <Message /> 
    </GetFullAxxAccountNoResult> 
</GetFullAxxAccountNoResponse> 
+0

Quel est le code dans votre forme d'expression? comment savez-vous qu'il ne retourne rien? – Zee

+0

Ne l'ai pas en face de moi en ce moment mais de la mémoire, vAccount = xpath (mymessage.body, "l'une des instructions xpath ci-dessus"). Je sais que ça ne revient pas car je vérifie la valeur de vAccount dans le débogueur de biztalk orchestration. – DarkW1nter

+0

Je vois aussi qu'il y a une valeur dans ce noeud à extraire ... – DarkW1nter

Répondre

2

Ces XPath par eux-mêmes retourner un nœud. Pour obtenir le contenu du texte, vous devez utiliser un format tel que:

XPath (myMessage, "string (// * [nom-local() 'SomeElement' =]/texte())")

1

Au lieu d'utiliser/text(). qui renvoie un noeud de texte. vous devez utiliser la fonction string() pour convertir le noeud en chaîne.

si

xpath(mymessage.body, "string(//*[local-name()='AccountNumber'])") 

travailleras.

En outre. Si vous avez défini votre schéma pour ce message dans votre application biztalk. promouvoir ce champ en tant que champs distingués dans le schéma rendra votre expression plus propre. Vous pouvez accéder à ce champ comme ceci:

vAcccount = mymessage.AccountNumber