xml.parse返回null google app脚本

时间:2013-05-13 11:07:35

标签: xml-parsing google-apps-script

我正在尝试解析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)

1 个答案:

答案 0 :(得分:1)

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

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

Debugger view

试试这个:

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

参考