【问题标题】:unable to parse xml with javascript loadXMLString()无法使用 javascript loadXMLString() 解析 xml
【发布时间】:2012-09-20 13:13:25
【问题描述】:

我正在尝试从 Web 服务解析 xml 文件。我正在使用 javascript loadXMLString 函数将 xml 解析为 html。如果我将 xml 代码插入到变量中,则使用本地文件可以正常工作。但是为了从外部链接获取 xml,我在这里使用了 php 函数,如下所示:

<?php 

$request = "http://www.somewebsite.com/feeds/get-cities.php?vendor_key=xxx";
$response = file_get_contents($request);
$xmlstring =  htmlspecialchars($response, ENT_QUOTES);
?>
<script language="javascript">
function loadXMLString(txt)  
{
if (window.DOMParser)
{
  parser=new DOMParser();
  xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.loadXML(txt); 
}
return xmlDoc;
}//function loadXMLString ends

text = <?php $xmlstring;?>

xmlDoc=loadXMLString(text);


document.write("<table border='1'>");
var x=xmlDoc.getElementsByTagName("city");
for (i=0;i<x.length;i++)
{ 
  document.write("<tr style='background:#dddddd;'><td>");
  document.write(x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue);
  document.write("</td><td>");
  document.write(x[i].getElementsByTagName("country")[0].childNodes[0].nodeValue);
  document.write("</td></tr>");
}
document.write("</table>");
</script>

在上面的代码中,我试图将 xml 代码从 php 变量 $xmlstring 插入到 javascript 变量文本中。但它什么也没显示。但是如果我将 xml 代码放在下面的脚本中,它就可以完美地工作:

text="<cities>"
text=text+"<city>";
text=text+"<name>bulga</name>";
text=text+"<country>Giada De Laurentiis</country>";
text=text+"<city_id>2005</city_id>";
text=text+"</city>";
text=text+"</cities>";

有没有人知道我该如何解析它。或者如果有人有更好的解决方案,请也建议我。

【问题讨论】:

    标签: php javascript xml parsing domparser


    【解决方案1】:

    尝试更改代码中的以下行

    text = <?php echo $xmlstring;?>
    

    它应该回显你的变量值。

    【讨论】:

    • 是否只需要将 XML 解析为 javascript?你可以将xml解析成php然后制作你的html?
    • 是的,我也通过 php 对其进行了解析,但是当我们需要在网页上相应地过滤不同类别的结果时,它会出现问题。然后它需要用 javascript 来做这件事,因为 javascript 是客户端,可以在点击按钮时轻松地做这些事情。让我告诉你我想做什么,在这里查看这个链接你可以看到左侧过滤 btns 是如何工作的 trivago.com 去这个网站搜索酒店,你可以看到一些过滤按钮的结果
    • 你能在 loadXMLString 函数中得到 alert(text) 吗?
    • 你能在 htmlspecialchars 行之后回显 xmlstring 吗?粘贴结果?
    • ys 显示这样的 xml 字符串 8130西班牙A Pontenova1556英国阿伯丁17239意大利Abetone1建立计数>
    【解决方案2】:

    在 GBD 的帮助下,我编写了以下代码并开始显示城市列表。但是当我尝试使用不同的 xml 代码时它不起作用。可能有人对此有更好的解决方案

    <?php 
    function curl_get_file_contents($URL) 
    { 
    $c = curl_init(); 
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($c, CURLOPT_URL, $URL); 
    $contents = curl_exec($c); 
    curl_close($c); 
    
    if ($contents) return $contents; 
    else return FALSE; 
    } 
    
    $xmlString = curl_get_file_contents("http://www.somesite.com/feeds/get-cities.php?vendor_key=xxx");
    
    ?>
    
    <script language="javascript">
    function loadXMLString(text) 
    { 
    if (window.DOMParser) 
    { 
    parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(text,"text/xml"); 
    } 
    else // Internet Explorer 
    { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async=false; 
    xmlDoc.loadXML(text);  
    } 
    return xmlDoc; 
    }
    
    var text = "<?php echo substr_replace($xmlString,"",0,39);?>";
    
    
    xmlDoc=loadXMLString(text);
    
    
    document.write("<table border='1'>");
    var x=xmlDoc.getElementsByTagName("city");
    for (i=0;i<x.length;i++)
    { 
    document.write("<tr style='background:#dddddd;'><td>");
    document.write(x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue);
    document.write("</td><td>");
    document.write(x[i].getElementsByTagName("country")[0].childNodes[0].nodeValue);
    document.write("</td></tr>");
    }
    document.write("</table>");
    </script>
    

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 1970-01-01
      • 2019-09-21
      • 2011-10-11
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多