所以我在这里做了我的研究,但找不到合适的答案。我不确定我做错了什么。我知道有类似的问题,但不完全是我的问题。
我在 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>
现在,我已经对许多不同的表达式进行了一些测试,但我无法让它工作。最近访问 url 属性的尝试是这样的:
<x:set var="url" select="string($newXML/channel/item/*[local-name()='content' and namespace-uri()='http://namespaceUrl.com/foo/']/@url)" />
这不会返回预期值:' http: //namespaceUrl.com/foo/ '
有人对我做错了什么有任何建议吗?提前致谢。