2010-12-09 4 views
2

Vu le code XML suivant:espace de nom saxon Xpath

<Document xmlns="urn:company.com:catalog.01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <book> 
     <author>Wells</author> 
    </book> 
</Document> 

Avec Xerces le fonctionnement des requêtes XPath suivantes:

//urn:company.com:catalog.01:author 

Quand j'utilise Saxon (v 8.7) Je un StaticError avec le message « non valide QName locale partie {company.com:catalog ....} '. À quoi devrait ressembler la requête Xpath pour obtenir la valeur de l'auteur?

Répondre

0

Xerces ne devrait pas permettre une expression XPath comme

//urn:company.com:catalog.01:author 

XPath XML est compatible noms, donc un : (deux points) dans un QName divise la partie de préfixe d'une partie de nom local d'un QName.

Il n'y a pas de syntaxe XPath utiliser le QName pleine expansion dans le test de nom:

Vous pouvez utiliser

//*[local-name()='author'][namespace-uri()='urn:company.com:catalog.01'] 
+0

Donc, ce xmlns est-il même valide? – fransvn

+0

@drifwood: Oui, en fait, toute chaîne est valide en tant qu'URU d'espace de noms, en plus il doit s'agir d'une URI valide. –

+0

@Alejandro: J'ai effectué quelques modifications éditoriales. En outre, l'exigence d'un espace de noms pour être un URI valide n'est pas strictement appliquée - le processeur de langage ne déclenche pas d'erreur si un espace de noms n'est pas un URI valide. Par conséquent, ce n'est pas une exigence - juste une recommandation. –

0

Vous n'avez pas poster vos fichier XSL. Je suis passé par cette récemment, et la solution est pour vous assurer que le fichier xsl a une ligne comme:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="urn:company.com:catalog.01"> 

Ensuite, vos références à des éléments dans le fichier xml sont préfixées avec « c: »:

//c:author 
+0

Malheureusement, il n'est pas utilisé dans un fichier XSL. J'utilise l'API XPath pour la classification rapide et configurable des messages, etc. Mais merci pour l'info qui sera utile à l'avenir. – fransvn

Questions connexes