l'espace de noms d'erreur : préfixe d'espace de Noms de la bd sur le mot-clé n'est pas défini
J'ai un énorme fichier xml que je voudrais diviser dans des documents xml; chaque fichier xml est censé avoir explicite d'une déclaration d'espace de noms le cas échéant, comme indiqué sur la "Sortie" dans la section ci-dessous. Cependant, je reçois le message d'erreur "erreur espace de noms : préfixe d'espace de Noms de la bd sur le mot-clé n'est pas défini"
Ma question est, comment puis-je indiquer explicitement mon processeur XSLT où placer déclaration d'espace de noms dans le résultat? Je suis passé par un couple de tutoriels en ligne, mais je n'arrive pas à comprendre comment régler cette question.
Partielle XSLT Extrait de
...
...
<xsl:template match="chapter">
<bd:chapter>
<xsl:apply-templates select="name" />
<xsl:apply-templates select="page" />
</bd:chapter>
</xsl:template>
<xsl:template match="name">
<bd:name>
<xsl:value-of select="." />
</bd:name>
</xsl:template>
...
...
De Sortie Désiré
<?xml version="1.0" encoding="utf-8" ?>
<books>
<bd:book xmlns:bd="http://www.bd.org.za/db" xmlns:cd="http://www.bd.org.za/cd">
<bd:name>book01</bd:name>
<bd:chapter>
<cd:name>chapter01<cd:name>
<bd:page>
<cd:title></cd:title>
<pd:description></pd:description>
</bd:page>
</bd:chapter>
</bd:book>
...
...
...
</books>
Mise à jour #1
<?xml version="1.0" encoding="utf-8" ?>
<books>
<book>
<name>book01</name>
<chapter>
<name>chapter01<name>
<page>
<title></title>
<description></description>
</page>
</chapter>
</book>
...
...
...
</books>
Mise à jour #2
@les polishchuk Update2 donner le résultat suivant
<?xml version="1.0"?>
<root xmlns:pd="namespace2">
<pd:Book xmlns:pd="http://namespace1.org/">
<pd_1:Name xmlns:pd="namespace2" xmlns:pd_1="http://namespace1.org/">A</pd_1:Name>
<pd:Description xmlns:pd="namespace2">A1</pd:Description>
</pd:Book>
<pd:Book xmlns:pd="http://namespace1.org/">
<pd_1:Name xmlns:pd="namespace2" xmlns:pd_1="http://namespace1.org/">B</pd_1:Name>
<pd:Description xmlns:pd="namespace2">B1</pd:Description>
</pd:Book>
</root>
Le seul rythme, je voudrais que les espaces de noms apparaissent dans le livre de nœud. Veuillez voir ci-dessous
<?xml version="1.0"?>
<root>
<pd:Book xmlns:pd="http://namespace1.org/">
<pd:Name >A</pd:Name>
<pd:Description>A1</pd:Description>
</pd:Book>
<pd:Book xmlns:pd="http://namespace1.org/">
<pd:Name>B</pd_1:Name>
<pd:Description>B1</pd:Description>
</pd:Book>
</root>
Je vous remercie pour votre réponse. XML d'entrée est lié à un trop grand nombre de noeuds... pour l'instant, cependant, on pourrait supposer que nous sommes code de traitement en vertu de mise à Jour #1 ci-dessus. J'ai seulement besoin de conseils sur la façon d'aller à ce sujet explicitement notamment les espaces de noms d'éléments.
Il n'y a pas de différence pour moteur XML où l'espace est défini. Vous pouvez définir l'espace de noms dans le nœud racine
<root xmlns:pd="namespace2">
ou dans le livre nœud <pd:Book xmlns:pd="namespace2">
. Les deux sont égaux pour parser XML.OriginalL'auteur lightonphiri | 2011-07-23
Vous devez vous connecter pour publier un commentaire.
Supposons que vous avez XML suivant:
XML souhaitée (avec les espaces de noms):
XSLT appropriée:
Vous suffit d'ajouter les espaces de noms XSLT, puis de créer des nœuds à l'aide de l'espace de noms du préfixe.
Mise à jour 1:
Mise à jour 2:
Mise à jour 3:
Cette XSLT:
De sortie XML (comme dans votre mise à Jour 2, j'utilise MSXML 6.0), mais pour le moteur XML n'importe où un espace de noms est défini:
J'ai mis à jour ma réponse.
Je vous remercie. Est-il une raison particulière pour laquelle je me dois de souligner le même préfixe à deux des espaces de noms différents? J'ai besoin de comprendre afin que je puisse bien reproduire la solutiion. xmlns:pd="namespace2" xmlns:bd="namespace1"
Vous pouvez omettre les préfixes. Simplement écrire
<Book xmlns="namespace1">
.Il n'est pas nécessaire. En d'autres mots, les préfixes, c'est comme alias, pas plus.
OriginalL'auteur Kirill Polishchuk