Erreur: le Préfixe doit correspondre à un espace de noms
J'ai le code XML suivant que je veux transformer en XSLT.
Mon but principal est d'avoir une liste d'url. Il signifie que toute la ligne qui contient "http://".
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<urlset xmlns="http://www.google.com" xmlns:image="http://www.google1.com" xmlns:video="http://www.google2.com" xmlns:xhtml="http://www.google3.com">
<url>
<loc id="837">http://url1</loc>
</url>
<url>
<loc id="2332">http://url2</loc>
<image:image>
<image:loc>http://url3</image:loc>
</image:image>
<image:image>
<image:loc>http://url4</image:loc>
</image:image>
</url>
</urlset>
J'ai créé un XSLT que les suivants;
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html>
<body>
<h1>URLS</h1>
<ul>
<xsl:for-each select="urlset/url">
<li>
<xsl:value-of select="loc"/>
</li>
</xsl:for-each>
<xsl:for-each select="urlset/url/image:image">
<li>
<xsl:value-of select="image:loc"/>
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Le premier foreach ne retourne rien et
le deuxième foreach donne exception comme:
Idsystème Inconnu; la Ligne N ° 15; la Colonne #53; Préfixe doit se résoudre à un
espace de noms: image
Quelqu'un pourrait-il aider pourquoi cette XSLT échoue ?
- 1. votre XML vraiment contenir 4 différentes déclarations d'espace de noms avec le même URI
http://www.google.com
? -- 2. "Mon principal objectif est d'avoir une liste d'url. Il signifie que toute la ligne qui contient "http:// "." Je ne vois pas toutes les lignes contenant "http://" dans votre exemple. - 1. Oui je vois qu'il n'est pas nécessaire , je peux faire comme kjhughes suggéré. 2. J'ai mis en clair pour démontrer certaines urls. Imaginez les url commençant par http préfixe pour les valeurs de la balise où j'ai mis url1, url2 ... et ainsi de suite.
- Eh bien, c'est un peu déroutant. Si l'entrée est à l'aide de différents Uri pour les différents préfixes (comme il se doit), puis
image:loc
permettra de récupérer uniquement à certains endroits. - Si vous faites usage d'un espace de noms à l'intérieur de n'importe quel xml, vous devez définir cet espace de noms avant
Vous devez vous connecter pour publier un commentaire.
Pour résoudre l'erreur immédiate, ajouter un espace de noms définition de la
image
préfixe d'espace de noms à votre feuille de style:Il y a un certain nombre d'autres ajustements qui seront nécessaires une fois que vous éliminer l'erreur. Il ne fait aucun sens de définir de nombreux préfixes d'espace de noms dans votre XML pour les mêmes (douteuse) de l'espace de noms.
Quelque chose comme XML d'entrée serait plus raisonnable:
Ensuite, le XSLT,
donnera la liste d'URL que vous cherchez:
Vous aussi pourriez envisager d'utiliser un modèle-match-en fonction de l'organisation de votre XSLT plutôt que dans une boucle de l'organisation comme une affaire de style. Pour un petit exemple comme ceci, il y a peu de différence dans la complexité, mais pour un plus grand problème, match de base de l'organisation est plus propre et plus clair.
Il semble que votre XML peut avoir trois types de
loc
éléments, chacun dans un espace de noms différent. Pour obtenir tout cela, vous avez besoin de faire quelque chose comme ceci:XSLT 1.0
Test d'entrée
Résultat
Facile, mais moins efficace alternative:
XSLT 1.0