2010-11-16 34 views
1

Je dispose d'un fichier xml qui contient le nom d'un autre fichier xml:Comment appeler document XPath() avec des références de base résoluble

dans mon stylesheet, je DETECT @href et ouvrez le document via le document avec base de la « URI de base du noeud à partir duquel la la chaîne du premier argument() fonction

Document (@href)

devrait appeler mon URIResolver.resolve (FNAME, de base) est calcul ted »

documents (@href ,.)

devrait appeler mon URIResolver.resolve (FNAME, base) avec la base de la "URI de base du noeud courant"

Cependant dans la pratique xalan/J

Document (@href)

est vide

et

documents (@href ,.)

est de donner le répertoire courant de ma demande

Comment puis-je configurer la base pour que mon URIResolver peut trouver le fichier?

+0

C'est un processeur xslt - question dépendante (Xalan J), doit donc être étiquetée XSLTProcessor. –

+0

En outre, cette question n'a rien à voir avec XPath, car la fonction 'document()' n'est pas une fonction XPath. –

+0

@Dimitre: Je ne sais pas ... Je pense qu'il y a une certaine incompréhension dans la façon dont fonctionne la fonction XSLT 'document()'. Je ne suis pas sûr que ce soit un bug de Xalan, en plus de ce qu'Op've a écrit. –

Répondre

1

Notez que cette façon

document(@href) 

Il est égal à ce

document(string(@href),@href) 

et ainsi peut-être aussi

document(string(@href),.) 

De http://www.w3.org/TR/xslt#document:

Lorsque la fonction document a exactement un argument et l'argument est un ensemble de nœuds , le résultat est l'union , pour chaque noeud dans l'ensemble de nœuds, du résultat de l'argument appelant la fonction de document le premier argument étant la valeur de chaîne du nœud , et le second argument étant un ensemble de nœuds avec le nœud comme seul membre .

Et puis

L'URI de base (voir [3.2 URI de base]) de le noeud dans le second argument ensemble de nœuds qui est le premier dans le document ordre est utilisé comme URI de base pour résoudre l'URI par rapport à un URI absolu

Mais ceci:

document(string(@href)) 

Utilisera l'URI de la feuille de style comme résolveur. Parce que:

Lorsque le premier argument de la fonction du document est un ensemble de nœuds, le premier argument est converti en une chaîne comme par un appel à la chaîne fonction . Cette chaîne est traitée comme une référence URI .

Et puis

Si le second argument est omis, alors la valeur par défaut au nœud du stylesheet qui contient l'expression qui comprend l'appel à la fonction document.

A propos de la question

Comment puis-je configurer la base pour que mon URIResolver peut trouver le fichier?

Réponse: utiliser la deuxième forme et @xml:base