Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JSP中使用给定命名空间访问导入的XML元素属性_Jsp_Xpath_Jstl_Expression - Fatal编程技术网

在JSP中使用给定命名空间访问导入的XML元素属性

在JSP中使用给定命名空间访问导入的XML元素属性,jsp,xpath,jstl,expression,Jsp,Xpath,Jstl,Expression,所以我在这里做了研究,但没有找到合适的答案。我不确定我做错了什么。我知道也有类似的问题,但不完全是我的问题 我正在jstl中导入rss提要,如下所示: <c:import url="http://urltoRSSfeed" var="rssFeed" /> 一旦有了提要,我将使用DocumentBuilderFactory构建XML文档 <% String xml = (String)pageContext.getAttribute("rssFeed"); Do

所以我在这里做了研究,但没有找到合适的答案。我不确定我做错了什么。我知道也有类似的问题,但不完全是我的问题

我正在jstl中导入rss提要,如下所示:

<c:import url="http://urltoRSSfeed" var="rssFeed" />

一旦有了提要,我将使用DocumentBuilderFactory构建XML文档

<%  String xml = (String)pageContext.getAttribute("rssFeed");
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(xml));
    Document doc = db.parse(is);
    pageContext.setAttribute("newXML",doc);%>

这不是问题所在。在这个scriptlet运行之后,我几乎可以访问XML文档中的每个元素。问题在于,在这个XML文档中,有一个元素使用了我无法访问的已声明名称空间

rss的顶部看起来像这样

<rss xmlns:media="http://namespaceUrl.com/foo/" version="2.0">
<channel>
     <item>
          <title>I can access this fine</title>
          <description>I can access this fine</description>
          <!-- however, cannot access this url attribute below-->
          <media:content url="http://www.IwantThisUrl.com" /> 
     </item>
</channel>

我试图访问的元素属性如下所示

<rss xmlns:media="http://namespaceUrl.com/foo/" version="2.0">
<channel>
     <item>
          <title>I can access this fine</title>
          <description>I can access this fine</description>
          <!-- however, cannot access this url attribute below-->
          <media:content url="http://www.IwantThisUrl.com" /> 
     </item>
</channel>

我可以用这个
我可以用这个
现在,我已经对许多不同的表达式进行了一些测试,但我无法让它工作。最近访问url属性的尝试如下:

<x:set var="url" select="string($newXML/channel/item/*[local-name()='content' and namespace-uri()='http://namespaceUrl.com/foo/']/@url)" />

这不会返回预期的值:“”

有人对我做错了什么有什么建议吗?提前谢谢。

回答谢谢拉尔斯

string($newXML/channel/item/*/@url)

它的回报是什么?从您显示的数据来看,它似乎应该返回
”http://www.IwantThisUrl.com“
。它不返回任何内容。这就是我感到困惑的原因:[如果删除
和namespace-uri()='http://namespaceUrl.com/foo/“
-那么它是否返回了一些内容?关于
字符串($newXML/channel/item/*/@url)
-它是否不返回任何内容?正在尝试确定哪个部分失败。当我删除时,名称空间-uri()=''什么也没发生,但当我尝试$newXML/channel/item/*/@url时,它起作用了!!为了回答你的问题,我想让它保持这种方式是可以的,只要你确信
的其他子元素不会有
url
属性。我不知道为什么
local-name()='content'
失败了……从您显示的情况来看,它看起来应该是有效的。