2010-04-06 4 views
1

Je crée un Xform qui lit un document XML et crée un formulaire de saisie pour la mise à jour du document. Cependant, apparemment en raison d'un problème d'espace de noms aucune de mes expressions Xpath ne résout. Mon formulaire fonctionne correctement sur une instance simple lorsque le fichier d'instance n'a pas d'espace de noms. Cependant, j'ai besoin du support de l'espace de noms.xforms "instance namespace" issue

Mon fichier d'instance possède un espace de noms "ai: inventory".

Je référencement les données d'instance

Où dois-je déclarais le préfixe « ai » pour mon espace de noms pour que mes expressions XPath peuvent trouver les éléments appropriés?/ai: inventaire/produits?

J'ai essayé de créer le préfixe dans le tag d'ouverture html ... cela n'a pas aidé.

grâce,

+0

Montrez-nous une "instance" très simple qui a toujours le problème d'espace de noms. –

Répondre

0

déclaration générale namespace applique à l'élément en cours et tous les éléments descendants. Si vous devez utiliser le même espace de noms à la fois dans le modèle et dans la vue, alors la balise html est un bon choix. Quelque chose comme ceci:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="yournamespace"> 
    <head> 
    <xf:model> 
     <xf:instance xmlns=""> 
     <ai:inventory> 
      <product>Hello</product> 
     </ai:inventory> 
     </xf:instance> 
    </xf:model> 
    </head> 
    <body> 
    <xf:output ref="/ai:inventory/product"/> 
    </body> 
</html> 

Gardez à l'esprit que si vous utilisez des éléments non-espaces de noms en instance et également utiliser XHTML comme votre espace de noms par défaut, vous devez redéclarer espace de noms par défaut avec xmlns = « », comme dans l'exemple.

1

Une instance XForms est un document XML dans son propre droit, vous devez inclure si les déclarations d'espace de noms appropriés pour chaque instance dans votre formulaire:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="http://example.com/"> 
    <head> 
    <xf:model> 
     <xf:instance> 
     <ai:inventory xmlns="" xmlns:ai="http://example.com/"> 
      <product>foo</product> 
     </ai:inventory> 
     </xf:instance> 
    </xf:model> 
    </head> 
    <body> 
    <xf:output ref="/ai:inventory/product"/> 
    </body> 
</html> 

Il y a quelques processeurs qui évalueront le XPath correctement si votre instance est en ligne (plutôt qu'une ressource externe), mais je ne recommanderais pas de s'appuyer sur ce comportement.

0

Les deux réponses ont été corrigées. Cependant, j'ai trouvé que mon problème était lié à l'utilisation de la feuille de style xsl xform pour rendre mon xform. quand je suis passé à orbeon, tout a bien fonctionné.

+0

Firefox ne prend toujours pas en charge l'axe d'espace de noms et XSLTForms inclut une solution de contournement (non parfaite) pour les espaces de noms. L'ajout d'un élément ou d'un attribut factice est même requis dans certains cas. Quel navigateur utilisez-vous? –