0

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

我在 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/ '

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

4

1 回答 1

0

感谢 LarsH 的回答

string($newXML/channel/item/*/@url)
于 2013-07-10T20:51:09.660 回答