J'essaye d'analyser le XML suivant en utilisant JSTL. Je peux facilement récupérer tous les éléments dans le XML en dehors des balises avec le préfixe «t», comment puis-je faire cela?JSTL - analyse ne fonctionne pas pour les éléments avec espace de noms
XML ressemble (flux.xml)
<rss version="2.0" xmlns:t="http://www.xxx.co.uk/xxx">
<channel>
<title></title>
<link></link>
<description></description>
<language>en-uk</language>
<copyright></copyright>
<webMaster></webMaster>
<pubDate>Thu, 02 Sep 2010 16:56:49 +0100</pubDate>
<lastBuildDate>Thu, 02 Sep 2010 17:24:03 +0100</lastBuildDate>
<ttl></ttl>
<image>
<title></title>
<link></link>
<width></width>
<height></height>
<url></url>
</image>
<category></category>
<item>
<title>Title text 1</title>
<link>http://a.b.com/link1</link>
<description>Description text 1</description>
<enclosure url="http://a.b.com/xxxx/yyyy1.jpg" length="999" type="image/jpeg" />
<guid>Unique-identifier-1</guid>
<test>
<test1>azman</test1>
</test>
<t:fields>
<t:isfeatured>true</t:isfeatured>
</t:fields>
</item>
</channel>
et mon JSTL ressemble à ceci
<c:import url="feed.xml" var="xml"/><x:parse xml="${xml}" var="doc"/>
qui suit retourne "texte Titre 1"
<x:out select="$doc/rss/channel/item/title" />
Cependant, le foll provoquera l'dû erreur suivant
<x:out select="$doc/rss/channel/item/t:fields/t:isfeatured" />
Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException (JspServletWrapper.java:510) org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java : 401) org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service (JspServlet.java:260) javax.servlet.http.HttpServlet. service (HttpServlet.java:717) cause racine
javax.servlet.ServletException: jav ax.servlet.jsp.JspTagException: Erreur lors de l'évaluation de l'expression XPath "/ rss/channel/item/t: champs/t: isfeatured": javax.xml.transform.TransformerException: le préfixe doit être résolu en un espace de noms: t org.apache. jasper.runtime.PageContextImpl.doHandlePageException (PageContextImpl.java:858) org.apache.jasper.runtime.PageContextImpl.handlePageException (PageContextImpl.java:791) org.apache.jsp.index_jsp._jspService (index_jsp.java:106) org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:70) javax.servlet.http.HttpServlet.service (HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper .java: 377) org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:313) org.apache.jasper.servlet.JspSe rvlet.service (JspServlet.java:260) javax.servlet.http.HttpServlet.service (HttpServlet.java:717) causes profondes
javax.xml.transform.TransformerException: Prefix doit se résoudre à un espace de noms: t org.apache.xpath.compiler.XPathParser.error (XPathParser.java:640) org.apache.xpath.compiler.Lexer.mapNSTokens (Lexer.java:676) org.apache.xpath.compiler.Lexer.tokenize (Lexer.java:303) org.apache.xpath.compiler.Lexer.tokenize (Lexer.java:134) org.apache.xpath.compiler.XPathParser.initXPath (XPathParser.java:146) org.apache. xpath.XPath. (XPath.java:200) org.apache.taglibs.standard.tag.common.xml.JS TLXPathAPI.eval (JSTLXPathAPI.java:285) org.apache.taglibs.standard.tag.common.xml.XPathUtil.valueOf (XPathUtil.java:472) org.apache.taglibs.standard.tag.common.xml. ExprSupport.doStartTag (ExprSupport.java:64) org.apache.jsp.index_jsp._jspx_meth_x_005fout_005f0 (index_jsp.java:173) org.apache.jsp.index_jsp._jspService (index_jsp.java:91) org.apache.jasper .runtime.HttpJspBase.service (HttpJspBase.java:70) javax.servlet.http.HttpServlet.service (HttpServlet.java: 717) org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:313) org.apache.jasper.servlet .JspServlet.service (JspServlet.java:260) javax.servlet.http.HttpServlet.service (HttpServlet.java:717)
Merci pour toute aide!
Lorsque vous entrez du code, en particulier du code XML, n'oubliez pas de mettre en retrait 4 espaces pour qu'il ne soit pas analysé par SO (le XML est fortement altéré sauf s'il est indenté). Il y a aussi un bouton au-dessus de la zone d'entrée de texte (01010101) qui indentera les blocs sélectionnés pour vous. –
Je viens de faire ce que vous avez suggéré, merci –
+1 Une question bien écrite avec des informations complètes. Bienvenue à SO. –