2009-11-22 5 views
0

Voici un exemple de la sortie XQuery que je reçois:XQuery: attribut xsi bizarre étant inséré dans ma sortie XQuery

<clinic> 
    <Name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Healthy Kids Pediatrics</Name> 
    <Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">510 W 27th St, Los Angeles, CA 90007</Address> 
    <PhoneNumberList>213-555-5845</PhoneNumberList> 
    <NumberOfPatientGroups>2</NumberOfPatientGroups> 
</clinic> 

Comme vous pouvez le voir, dans la balise <Name> et <Address>, il y a ces xmlns étranges : tags xsi ajoutés à celui-ci.

Le plus drôle est que si je vais en haut de mon fichier xml, et supprimer:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="vaccination.xsl"?> 
<Vaccination xsi:noNamespaceSchemaLocation="vaccination.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

l'expression

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

Alors maintenant ma sortie XML XQuery ressemblera à ceci (qui est ce que je veux)

<clinic> 
    <Name>Healthy Kids Pediatrics</Name> 
    <Address>510 W 27th St, Los Angeles, CA 90007</Address> 
    <PhoneNumberList>213-555-5845</PhoneNumberList> 
    <NumberOfPatientGroups>2</NumberOfPatientGroups> 
</clinic> 

MAIS, quand je vois mon XML dans mon navigateur, il vous donnera une erreur et l'affichage somethin g comme:

XML Parsing Error: prefix not bound to a namespace 
Location: file:///C:/Users/Pac/Desktop/csci585-hw3/vaccination.xml 
Line Number 3, Column 1:<Vaccination xsi:noNamespaceSchemaLocation="vaccination.xsd"> 
^ 

Quelqu'un at-il une idée de la façon de supprimer ces balises xsi de ma sortie de XQuery sans casser mon XML/XSL?

Répondre

2

La suppression de la déclaration d'espace de nom du nœud supérieur rend le document XML non valide, car le préfixe xsi est utilisé mais non déclaré. Cela aurait dû provoquer une erreur lorsque vous essayez de charger le document dans une requête. Je suppose que les nœuds de nom et d'adresse sont copiés directement à partir du document source et que les autres nœuds sont construits.

Lors de la copie d'un noeud à partir du document source, les espaces de noms d'étendue du noeud source sont combinés avec les espaces de noms d'étendue dans le noeud qui contient la copie. La façon dont ils sont combinés est spécifiée par le copy-namespaces-mode.

Dans votre cas, vous souhaitez que les espaces de noms soient hérités du nœud parent (le nœud de la requête), mais vous ne voulez pas conserver les espaces de noms dans le document source où ils sont inutiles.

Ceci peut être réalisé en ajoutant la ligne suivante au haut de la requête:

declare copy-namespaces no-preserve, inherit; 
+0

Parfait. Fonctionne comme un charme. Je vous remercie! – sivabudh