2016-05-01 12 views
-1

私はphpに慣れていません(ちょうど学習を始めます)と私は問題があります: 私はxveファイルをサーバ上に持っています。このファイルを "読む"。simplexmlはすべての属性ではない

<result> 
    <rowset> 
      <row name="abc" id="def" ...> 
      <row name="abc" id="def" ...> 
      <row name="abc" id="def" ...> 
      ... 
    </rowset> 
</result> 

いくつかのWebページを検索すると、すべての行のすべての属性をエコーする方法が見つかりました。私が得る結果として

<?php 
$url = "http://api.eveonline.com/eve/AllianceList.xml.aspx?version=1"; 

$xml = simplexml_load_file($url); 

$nrOfRows = $xml->result[0]->rowset[0]->count(); 
$n = 0; 

for ($n = 0; $n <= $nrOfRows; $n++) { 
    foreach($xml->result[0]->rowset[0]->row[$n]->attributes() as $a => $b) { 
     echo $a, " = ", $b, "<br>"; 
    } 
} 
?> 

: はここに私のコードです

name = abc 
id = def 
... 
name = abc 
id = def 
... 

これは良さそうに見えますが、私が欲しいものを正確ではないthatsの。 私はすべての行の特別な属性が必要です。たとえば、結果としてすべての行のすべての名前が必要です。

ありがとうございました。 サリエル

答えて

0
あなたは、単一の属性にアクセスするために、配列の構文を使用することができます

echo $xml->result[0]->rowset[0]->row[$n]['name']; 

意志出力:

Goonswarm Federation 
Pandemic Horde 
Test Alliance Please Ignore 
(...) 

はまた、あなたがこのようにあなたのコードを簡素化することができることに注意してください。

foreach($xml->result[0]->rowset[0]->row as $row) 
{ 
    echo $row['name'] . '<br>'; 
} 
+0

大きな感謝! "echo $ xml-> result [0] - > rowset [0] - > row [$ n] ['name'];" exaktly私が探していた:)とループを簡素化することは良いアイデアです – Sariel

0

はここnameidlang属性とすべての行要素のテキストtextを取得しますDOMDocumentDOMXpathクラス

$xml = <<< LOL 
<result> 
    <rowset> 
      <row name="abc" id="def" lang="pt">Olá</row> 
      <row name="abc" id="def" lang="en">Hello</row> 
      <row name="abc" id="def" lang="fr">Bonjour</row> 
    </rowset> 
</result> 
LOL; 

$dom = new DOMDocument(); 
libxml_use_internal_errors(true); 
$dom->loadXML($xml); 
$xpath = new DOMXpath($dom); 
foreach ($xpath->query("//row") as $row){ 
    echo $row->getAttribute('name'); 
    echo $row->getAttribute('id'); 
    echo $row->getAttribute('lang'); 
    echo $row->textContent; 
} 

上記の例では、ビルドを使用する例です。


あなたがidまたはclass、使用して行をフィルタする必要がある場合は

Ideone Demo

$xpath->query("//row[@class='someClass']") 
$xpath->query("//row[@id='someId']") 
関連する問題