0

我正在尝试解析 xml 但结果返回null

这是xml:

<feed>
    <title type="text">neymar</title>
    <subtitle type="text">Bing Image Search</subtitle>
    <id>https://api.datamarket.azure.com/Data.ashx/Bing/Search/Image?Query='neymar'&$top=2</id>
    <rights type="text"/>
    <updated>2013-05-13T08:45:02Z</updated>
    <link rel="next" href="https://api.datamarket.azure.com/Data.ashx/Bing/Search/Image?Query='neymar'&$skip=2&$top=2"/>
    <entry>
        <id>https://api.datamarket.azure.com/Data.ashx/Bing/Search/Image?Query='neymar'&$skip=0&$top=1</id>
        <title type="text">ImageResult</title>
        <updated>2013-05-13T08:45:02Z</updated>
        <content type="application/xml">
            <m:properties>
                <d:ID m:type="Edm.Guid">99cb00e9-c9bb-45ca-9776-1f51e30be398</d:ID>
                <d:Title m:type="Edm.String">neymaer wallpaper neymar brazil wonder kid neymar wallpaper hd</d:Title>
                <d:MediaUrl m:type="Edm.String">http://3.bp.blogspot.com/-uzJS8HW4j24/Tz3g6bNII_I/AAAAAAAAB1o/ExYxctnybUo/s1600/neymar-wallpaper-5.jpg</d:MediaUrl>
                <d:SourceUrl m:type="Edm.String">http://insidefootballworld.blogspot.com/2012/02/neymar-wallpapers.html</d:SourceUrl>
                <d:DisplayUrl m:type="Edm.String">insidefootballworld.blogspot.com/2012/02/neymar-wallpapers.html</d:DisplayUrl>
                <d:Width m:type="Edm.Int32">1280</d:Width>
                <d:Height m:type="Edm.Int32">800</d:Height>
                <d:FileSize m:type="Edm.Int64">354173</d:FileSize>
                <d:ContentType m:type="Edm.String">image/jpeg</d:ContentType>
                <d:Thumbnail m:type="Bing.Thumbnail">
                    <d:MediaUrl m:type="Edm.String">http://ts3.mm.bing.net/th?id=H.5042206689331494&pid=15.1</d:MediaUrl>
                    <d:ContentType m:type="Edm.String">image/jpg</d:ContentType>
                    <d:Width m:type="Edm.Int32">300</d:Width>
                    <d:Height m:type="Edm.Int32">187</d:Height>
                    <d:FileSize m:type="Edm.Int64">12990</d:FileSize>
                </d:Thumbnail>
            </m:properties>
        </content>
    </entry>
    <entry>
        <id>https://api.datamarket.azure.com/Data.ashx/Bing/Search/Image?Query='neymar'&$skip=1&$top=1</id>
        <title type="text">ImageResult</title>
        <updated>2013-05-13T08:45:02Z</updated>
        <content type="application/xml">
            <m:properties>
                <d:ID m:type="Edm.Guid">9a6b7476-643e-4844-a8da-a4b640a78339</d:ID>
                <d:Title m:type="Edm.String">neymar jr 485x272 Neymar Show 2012 Hd</d:Title>
                <d:MediaUrl m:type="Edm.String">http://www.sontransferler.com/wp-content/uploads/2012/07/neymar_jr.jpg</d:MediaUrl>
                <d:SourceUrl m:type="Edm.String">http://www.sontransferler.com/neymar-show-2012-hd</d:SourceUrl>
                <d:DisplayUrl m:type="Edm.String">www.sontransferler.com/neymar-show-2012-hd</d:DisplayUrl>
                <d:Width m:type="Edm.Int32">1366</d:Width>
                <d:Height m:type="Edm.Int32">768</d:Height>
                <d:FileSize m:type="Edm.Int64">59707</d:FileSize>
                <d:ContentType m:type="Edm.String">image/jpeg</d:ContentType>
                <d:Thumbnail m:type="Bing.Thumbnail">
                    <d:MediaUrl m:type="Edm.String">http://ts1.mm.bing.net/th?id=H.4796985557255960&pid=15.1</d:MediaUrl>
                    <d:ContentType m:type="Edm.String">image/jpg</d:ContentType>
                    <d:Width m:type="Edm.Int32">300</d:Width>
                    <d:Height m:type="Edm.Int32">168</d:Height>
                    <d:FileSize m:type="Edm.Int64">4718</d:FileSize>
                </d:Thumbnail>
            </m:properties>
        </content>
    </entry>
</feed>

这是代码:

var response = UrlFetchApp.fetch('https://api.datamarket.azure.com/Bing/Search/Image?Query=%27neymar%27&$top=2',options)
var resp = response.getContentText();
var ggg = Xml.parse(resp,false).getElement().getElement('entry').getElement('content').getElement('m:properties');
Logger.log(ggg);

我如何获得元素<d:MediaUrl m:type="Edm.String">

更新:但仍然无法正常工作

var response = UrlFetchApp.fetch('https://api.datamarket.azure.com/Bing/Search/Image?Query=%27neymar%27&$top=2',options)
var text = response.getContentText();
var eleCont = Xml.parse(text,true).getElement().getElement('entry').getElement('content');
var eleProp = eleCont.getElement('hxxp://schemas.microsoft.com/ado/2007/08/dataservices/metadata','properties')
var medUrl= eleProp.getElement('hxxp://schemas.microsoft.com/ado/2007/08/dataservices','MediaUrl').getText()

 Logger.log(medUrl)
4

1 回答 1

1

当提供者使用多个命名空间(由元素名称m:d:在元素名称前面表示)时,您可以忽略它们以检索您感兴趣的数据。

调用getElement()获取 XML 文档的根之后,您可以使用属性名称浏览其余部分。(在调试器中停下var feed = ...来,探索提要,你会发现那里有整个 XML 文档

调试器视图

尝试这个:

  var text = Xml.parse(resp,true);
  var feed = text.getElement();
  var urls = [];
  for (var i in feed.entry) {
    urls.push(feed.entry[0].content.properties.MediaUrl.Text);
  }
  Logger.log(urls);

这也有效。请注意,您的响应中有多个条目,此示例紧随其中的第二个:

var ggg = Xml.parse(resp,true)
             .getElement()
             .getElements('entry')[1]
             .getElement('content')
             .getElement('properties')
             .getElement('MediaUrl')
             .getText();

参考

于 2013-05-13T15:50:17.563 回答