使用Ionic和Angular 2,我使用jQuery来解析XML并获取元素值。
以下是我正在解析以获取gameID的XML。
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ev="http://purl.org/rss/1.0/modules/event/" xmlns:s="http://sidearmsports.com/schemas/cal_rss/1.0/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>2017 Baseball Schedule</title><link>Original link here</link>
<atom:link rel="self" href="Original link here" />
<description> </description>
<item>
<title> Baseball at </title>
<description>Baseball at …</description>
<link> Original link here </link>
<s:gameid>1234</s:gameid>
<s:links>
<s:livestats>stats go here<s:livestats>
</s:links>
</item>
<item>
<title> Baseball at </title>
<description> Baseball at …</description>
<link> Original link here </link>
<s:gameid>1235</s:gameid>
<s:links>
<s:livestats>State go here<s:livestats>
</s:links>
</item>
</channel>
</rss>
以下是我用于解析的代码:
this.http.get(urlToUse).subscribe((res) => {
var response = res.text();
response = response.replace(/^(\r\n)|(\n)/g,'');
let parsedXML = jQuery(jQuery.parseXML(response));
parsedXML.find('item').each(function() {
el = jQuery(this);
console.log("Schedule data");
console.log("el");
console.log(el.text());
gameId = el.find('gameid');
console.log("gameId");
console.log(gameId);
console.log(gameId.text());
});
});
当我在浏览器和任何其他iOS版本(10.3.1除外)上运行时,响应文本显示所有元素,GameId控制台还会打印所有gameIds。
对于10.3.1,它会打印所有元素,但gameId控制台会打印一个空行。
'gameid'是本地名称,所以它在任何地方都选择了正确的元素。尝试替换find('gameid')找到('s:gameid')。没有运气!
答案 0 :(得分:0)
认为这可以帮助一些在这种情况下结束的人!
在上面的XML中,每个标签都有自己的本地名称。直到iOS 10.3,当他们被引用时,使用他们的本地名称,他们的价值被选中。标签没有名称空间,与现有的本地名称相匹配,因此它们继续工作。
解决方案:将带有名称空间的标签从el.find(&#39; gameid&#39;)替换为el.find(&#39; x \:gameid&#39;)。