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
InformationsquelleAutor shamaleyte | 2015-07-05