【发布时间】:2018-02-10 20:39:52
【问题描述】:
我正在尝试从 SportsRadar api 解析 XML 并检索有关奥运会每个国家/地区奖牌的信息。 API 似乎正在使用命名空间,我不太清楚如何解析 XML。
如果我查看 XML 的顶部,它看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<medals xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.sportradar.com/sportsapi/v1/winterolympics" generated_at="2017-12-03T12:23:38+01:00" xsi:schemaLocation="http://schemas.sportradar.com/sportsapi/v1/winterolympics http://schemas.sportradar.com/bsa/winterolympics/v1/xml/endpoints/winterolympics/medals.xsd">
<medals_by_country>
<medal_info country="Slovenia" country_code="SLO" ioc_code="SLO" total_ranking="1" gold_ranking="1" total="24" gold="14" silver="3" bronze="7"/>
<medal_info country="Canada" country_code="CAN" ioc_code="CAN" total_ranking="2" gold_ranking="1" total="17" gold="9" silver="5" bronze="3"/>
<medal_info country="Germany" country_code="GER" ioc_code="GER" total_ranking="3" gold_ranking="1" total="19" gold="8" silver="6" bronze="5"/>
如果我得到根元素并查看子元素,我会使用以下代码:
var xml_root = xmlData.getRootElement()
Logger.log( xml_root.getChildren() )
并得到这个输出:
[18-02-10 15:29:52:056 EST] [[Element: <medals_by_country [Namespace: http://schemas.sportradar.com/sportsapi/v1/winterolympics]/>], [Element: <medals_by_sport [Namespace: http://schemas.sportradar.com/sportsapi/v1/winterolympics]/>]]
所以看看文档,getChildText(name, namespace) 似乎是我根据国家信息获得奖牌的神奇门票。所以我尝试:
var tst = xml_root.getChildText('medals_by_country', 'http://schemas.sportradar.com/sportsapi/v1/winterolympics');
但我收到一条错误消息,告诉我“找不到方法 getChildText(string,string)”。我正在解析这意味着命名空间不应该作为字符串传递,也许?但我无法弄清楚它应该作为什么传递。
我尝试通过以下方式获取第一个国家/地区信息:
xml_root.getChild('medals_by_country').getChildren('medal_info');
而xml_root.getChild('medals_by_country') 返回空值。我想这是因为我没有通过命名空间引用它......
那么我应该怎么做才能获得每个国家/地区的奖牌信息?感觉就像我很接近,但有些东西我没有在这里摸索。
编辑: 我想出了如何创建一个命名空间(我认为)。我做了以下
var ns = XmlService.getNamespace("xsi", "http://schemas.sportradar.com/sportsapi/v1/winterolympics");
Buuut...我仍在从 xml 中提取空值,这让我很懊恼。
【问题讨论】: