0

私は次のようなxmlを持っています:

<item>
<title>HOUSE FIRE (NO INJURIES) - MONASH</title>
<link>http://esa.act.gov.au/feeds/currentincidents.xml</link>
<description>
Incident: HOUSE FIRE (NO INJURIES)
</description>
<guid>006782-03022013</guid>
<pubDate>04 Feb 2013 15:43:56 EST</pubDate>
<georss:point>-35.4165878527591 149.095271972785</georss:point>
</item>

georss:point要素のlat値とlong値を返すためのDOMオブジェクトのdojo.queryとは何ですか?

4

1 に答える 1

2

数ヶ月前に同じような問題があったのを覚えているので、これを試してみようと思いました。問題は、XML名前空間要素(<georss:point>)にあり、他の要素を見つけるのは簡単です。

CSS3 Selectorの仕様によれば、名前空間の要素は|を使用して選択できます。シンボル。したがって、georss|pointは正しいセレクターである必要があります。ただし、この名前空間をセレクタエンジンに事前に宣言しておく必要があります。dojo/queryでこれを行う方法がわかりません。

回避策は、*を使用して名前空間を示すことです。したがって、*|pointは機能します。ただし、ドキュメント内の任意の名前空間の任意のポイント要素が検出されます。ほとんどの場合、これは問題にはなりません。

例えば。

<script type="text/javascript">
    require([
        "dojo/query",
        "dojo/request",
        "dojo/dom-attr"
    ], function($, request, domAttr){
        request("test.xml", {
            "preventCache": true,
            "handleAs": "xml"
        }).then(function(xmldom){
            var georss = $("*|point", xmldom.documentElement);
            if(georss.length > 0){ // ensure we have our element
                console.log("georss:point", georss[0]); // Test code
                var latLng = domAttr.get(georss[0], "innerHTML").split(" ");
            }

        }, function(err){
            console.error(err);
        });
    });
</script>

すべての名前空間を取得すると問題が発生する場合は、namespaceURI属性に従ってノードをフィルタリングするだけで済みます。

名前空間をdojo/queryに渡す方法を知っている人がいるかもしれません。そうすれば、はるかに優れたものになります。Dojoにまだ含まれていない場合は、セレクターエンジンの機能である必要があります。

編集: Chrome、Firefox、Operaのいずれでも*|ポイントは必要ないようです。ポイントで十分です。ただし、これはInternet Explorerでは機能しません(IE8でテストしましたが、それ以降のバージョンはわかりません)。IEでは、名前空間セレクターが必要です。

于 2013-02-05T09:33:42.350 に答える