为什么解析XML并使元素不适用于iOS 10.3.1?

时间:2017-05-15 16:14:35

标签: jquery ios xml angular ionic-framework

使用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')。没有运气!

1 个答案:

答案 0 :(得分:0)

认为这可以帮助一些在这种情况下结束的人!

在上面的XML中,每个标签都有自己的本地名称。直到iOS 10.3,当他们被引用时,使用他们的本地名称,他们的价值被选中。标签没有名称空间,与现有的本地名称相匹配,因此它们继续工作。

解决方案:将带有名称空间的标签从el.find(&#39; gameid&#39;)替换为el.find(&#39; x \:gameid&#39;)。