2010-11-26 21 views
2

J'utilise GDataXML (utilise libxml2 en arrière-plan) sur l'iPhone pour lire une liste de noms à partir d'un XML-fichier.GDataXML/Libxml2 XPath concat ne fonctionne pas

<persons> 
    <person id=1> 
     <firstname>John<firstname> 
     <lastname>Doe<lastname> 
    </person> 
</persons> 

Mais lorsque je tente de concaténer d'abord et avec lastname

/persons/person/concat(firstname, ' ', lastname) 

il ne fonctionne pas avec GDataXML. En essayant la même chose avec l'exemple avec la librairie .NET XML ou en la testant avec AquaPath cela fonctionne.

Tout conseils ou d'autres alternatives pour le faire fonctionner?

+0

Bonne question, +1. Voir ma réponse pour une explication et pour une solution complète. :) –

+0

[AquaPath] (http://ditchnet.org/aquapath/) est un évaluateur XPath 2.0. –

Répondre

1

But when i try to concat first and lastname with

/persons/person/concat(firstname, ' ', lastname) 

it doesn't work with GDataXML.

LibXML est seulement en œuvre XPath 1.0.

L'expression ci-dessus est pas syntaxiquement correcte dans XPath 1,0 (il est correct XPath 2.0 expression).

When trying the same with example with the .NET XML libary or testing it with AquaPath it works.

Vous vous trompez sur XML .NET (sauf si vous utilisez une 3ème partie processeur XPath 2.0 comme Saxon, Altova ou XQSharp) - .NET ne met pas en oeuvre XPath 2.0.

Solution:

Utilisez l'expression suivante XPath 1.0:

concat(/*/*/firstname, ' ', /*/*/lastname) 
+0

@Dimitre: Aussi, juste dans ce cas, avec un fournisseur d'arbre XML en préservant l'espace blanc que les nœuds de texte, 'normaliser l'espace (/ personnes/personne [1])' fonctionnera. –

+0

@Dimitrie: ne fonctionne pas pour moi ... aussi ne fonctionne pas dans AquaPath et mon extension XML Chrome ... je reçois toujours'Error: INVALID_EXPRESSION_ERR: DOM XPath Exception 51' – Staeff

+0

@staeff: Si vous obtenez un tel message d'erreur signifie que votre copier/coller était incorrect et n'a pas exactement copié l'expression. L'expression XPath de ma réponse est valide à la fois dans XPath 1.0 et XPath 2.0. –