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);%>

これは問題ではありません。このスクリプトレットを実行すると、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 に答える