【发布时间】:2010-07-20 23:32:06
【问题描述】:
以下PHP代码:
<html>
<?php
$name = Secrezy;
$server = Sunstrider;
$raidurl='http://eu.wowarmory.com/character-achievements.xml?r='.$server.'&cn='.$name.'&c=168';
print_r($raidurl); // This is to check if the link is valid. Follow the link printed here and you should find a valid XML page
echo "<br>";
$xmlraid = simplexml_load_file($raidurl);
$achievement = array($xmlraid->xpath("/category/achievement[@id='4602']"));
print_r($achievement);
?>
</html>
没有像我期望的那样工作。 $achievement 不应该用这个填充:
<achievement categoryId="168" dateCompleted="2010-03-26T00:01:00+01:00" desc="Complete the 10-player raid achievements listed below." icon="inv_helmet_74" id="4602" points="25" reward="Reward: Bloodbathed Frostbrood Vanquisher" title="Glory of the Icecrown Raider (10 player)">
相反,我只得到一个空数组。
这是http://eu.wowarmory.com/character-achievements.xml?r=Sunstrider&cn=Secrezy&c=168页面的完整网址
谢谢!
编辑:将 xpath 更改为我完全错过的 /achievements/category/achievement[@id='4602'] 后,一切正常。所以谢谢你。但是,如果我将它实现到我的原始代码中,它仍然不能像我预期的那样工作。我确定我做错了什么,所以感谢您的帮助。
<?php
echo "<html>
<head>
<title>ARMORY.</title>
<meta http-equiv='Content-Type' content='text/html' charset=iso-8859-1>
</head>
<body>
<table width='50%' border='1' cellpadding='10' cellspacing='10'>";
ini_set("user_agent", "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8");
$server = "Sunstrider";
$guild = "Operation+Eskimo";
$url='http://eu.wowarmory.com/guild-info.xml?r='.$server.'&gn='.$guild;
$xml = simplexml_load_file($url);
$array = array();
foreach($xml->guildInfo->guild->members->character as $char)
if(strtolower($char['level']) === '80')
{
$array[] = $char['name']."<br />";
}
$i = 0;
while($array[$i] != null)
{
$name = $array[$i];
$raidurl='http://eu.wowarmory.com/character-achievements.xml?r='.$server.'&cn='.$name.'&c=168';
$xmlraid = simplexml_load_file($raidurl);
var_dump($xmlraid);
echo "<br><br>";
$achievement = array($xmlraid->xpath("/achievements/category/achievement[@id='4602']"));
$i++;
}
?>
</body>
</html>
xmlraid 的 var_dump 只产生这个(很多次由于 $i):
object(SimpleXMLElement)#3 (2) { ["@attributes"]=> array(2) { ["lang"]=> string(5) "en_us" ["requestUrl"]=> string(27) "/character-achievements.xml" } ["category"]=> object(SimpleXMLElement)#2 (1) { ["category"]=> array(12) { [0]=> object(SimpleXMLElement)#5 (0) { } [1]=> object(SimpleXMLElement)#6 (0) { } [2]=> object(SimpleXMLElement)#7 (0) { } [3]=> object(SimpleXMLElement)#8 (0) { } [4]=> object(SimpleXMLElement)#9 (0) { } [5]=> object(SimpleXMLElement)#10 (0) { } [6]=> object(SimpleXMLElement)#11 (0) { } [7]=> object(SimpleXMLElement)#12 (0) { } [8]=> object(SimpleXMLElement)#13 (0) { } [9]=> object(SimpleXMLElement)#14 (0) { } [10]=> object(SimpleXMLElement)#15 (0) { } [11]=> object(SimpleXMLElement)#16 (0) { } } }
我应该补充一点,我对 PHP 很陌生,所以我的代码不是很好。
【问题讨论】:
-
我得到了你正在寻找的其他标签(带有类名的div)。我们应该发送其他东西来查看您尝试使用的 XML 吗?
-
@Wrikken:您使用哪种浏览器?可能是自动应用了 XSL 样式表。如果我在 Firefox 3.6 中看到源代码,我可以看到 XML。
-
嗯,不(歌剧),它可以使用 XSL。但我会尝试FF
-
用IE浏览页面,你会看到XML。 (好吧,当你查看源代码时,你会的。)我不确定 FF,但 Chrome 要么触发一些“你的浏览器糟透了”开关,要么甚至在“查看源代码”查看它之前转换 XML。在这种情况下,IE 实际上比 Chrome 运行得更好。
-
嗯,即使
wget也得到了转换的东西......