【问题标题】:Is it possible to use XML from an external website? [closed]是否可以使用来自外部网站的 XML? [关闭]
【发布时间】:2011-12-05 05:52:09
【问题描述】:

我已经研究这个主题几个月了,但没有成功。许多帖子说这是可能的,但我还没有让它工作。

这是问题所在,我们正在使用以 XML 格式提供数据文件的资源。可在以下网址找到:http://www.idexonline.com/image_portal/Home/Graph/Base/IDEXOnlineDiamondIndex.xml

我想将此数据插入现有网页。

我尝试使用 XSL 或 XML 包含以及各种其他技术访问这些数据,但没有成功。

我目前在这个网站上使用 PHP。但是,我对这种方法持开放态度,它可以使用 JavaScript 或其他技术!帮助!

谢谢

【问题讨论】:

标签: php javascript xml xslt


【解决方案1】:

这对我有用:

<?php

$file  = 'http://www.idexonline.com';
$file .= '/image_portal/Home/Graph/Base/IDEXOnlineDiamondIndex.xml';

$xml = file_get_contents($file);

$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($xml);
$domXPath = new DOMXPath($xmlDoc);

$xPath = '/root/index';
$index = $domXPath->evaluate("string($xPath)");

$xPath = '/root/change';
$change = $domXPath->evaluate("string($xPath)");
$change = number_format(round($change, 2), 2);

echo "The index is '$index' and the change is '$change'";

当时的输出是这样的:

索引是'139.04',变化是'0.00'

【讨论】:

  • 这似乎工作得很好。你知道是否有办法将更改数字四舍五入到一位或两位小数?
  • 吉姆,我添加了一行来将更改四舍五入并格式化为两位小数。但是,根据我在过去几天看到的更改值,我认为您需要更高的精度,以便更改值具有任何意义。有了这么小的数字,几乎所有东西都会归零。在不知道您的数据来自哪种索引/更改的情况下,很难说您应该使用什么精度。
  • 感谢您的提示。这完美!你摇滚
  • 我会与客户核实。在他们自己的网站上,他们通常四舍五入到小数点后两位,并指出变化是正面的还是负面的。再次感谢
  • 我刚刚用 3 位小数检查了您的代码,它显示 -0.001。我认为这很完美。
【解决方案2】:

如果网站没有屏蔽你,你可以获得如下数据。

 $xml = simplexml_load_file('http://www.idexonline.com/image_portal/Home/Graph/Base/IDEXOnlineDiamondIndex.xml');
 print_r($xml);

【讨论】:

  • 我不明白这是如何工作的。你能提供完整的代码吗?您是否将其保存为 XML、HTML 或其他格式?
  • @JimMaivald 这是获取数据的完整代码。 codepad.viper-7.com/3EDmMH
  • @JimMaivald 只需阅读手册php.net/manual/en/book.simplexml.php
  • 感谢您对这个问题的帮助。但是你的回复忽略了它的基本基调。我尝试了各种技术。您的代码不完整。要完整,您必须这样输入: idexonline.com/image_portal/Home/Graph/Base/…); print_r($xml); ?>
  • @JimMaivald 对不起,我只是以为你知道这只是 php 代码 :)
【解决方案3】:

我不确定正确的解决方案。但是 AFAIK 从另一个位置访问数据需要远程机器上的跨域访问策略。 Wikipedia's take on this

【讨论】:

  • 上述使用 PHP 的解决方案都运行良好。提示 XSL 的解决方案,我还没有开始工作。
【解决方案4】:

此 XSLT 转换

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pUrl" select=
 "'http://www.idexonline.com/image_portal/Home/Graph/Base/IDEXOnlineDiamondIndex.xml'"/>

 <xsl:template match="/">
     <textarea>
       <xsl:copy-of select="document($pUrl)"/>
     </textarea>
 </xsl:template>
</xsl:stylesheet>

当应用于任何 XML 文档时,会产生

<textarea>
   <root>
      <index>139.09</index>
      <change>-0.00036470</change>
   </root>
</textarea>

【讨论】:

  • 我尝试使用以下方式应用您的 XSL: 它对我不起作用。您是否使用了其他方法?
  • @JimMaivald:[回复:您使用的是不同的方法吗?] 当然,我从不使用浏览器来启动 XML 转换。可以使用命令行实用程序(几乎所有 XSLT 处理器都附带此类)或从 XSLT IDE 启动代码(JS、C#、Java 等)转换。
  • @JimMaivald:浏览器很有可能在某种模式下启动 XSLT 处理器,其中document() 函数被禁用/禁止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 2015-07-14
相关资源
最近更新 更多