0

このxmlからノード情報を抽出するために次のphpコードを作成しました。

<sioctBoardPost rdfabout="http//boards.ie/vbulletin/showpost.php?p=67075">
  <rdftype rdfresource="http//rdfs.org/sioc/ns#Post" />
  <dctitle>hib team</dctitle>
  <siochas_creator>
    <siocUser rdfabout="http//boards.ie/vbulletin/member.php?u=497#user">
      <rdfsseeAlso rdfresource="http//boards.ie/vbulletin/sioc.php?sioc_type=user&amp;sioc_id=497" />
    </siocUser>
  </siochas_creator>
  <dctermscreated>1998-04-25T213200Z</dctermscreated>
  <sioccontent>zero, those players that are trialing 300 -400 pingers? umm..mager lagg and even worse/</sioccontent>
</sioctBoardPost>

<?php
$xml = simplexml_load_file("boards.xml");
$products[0] = $xml->xpath("/sioctBoardPost/sioccontent");
$products[1] = $xml->xpath("/sioctBoardPost/dctermscreated");
$products[2] = $xml->xpath("/sioctBoardPost/@rdfabout");
print_r($products);
  ?>

これにより、次の出力が得られます。

Array ( 
[0] => Array ( [0] => SimpleXMLElement Object ( [0] => zero, those players that are trialing for hib team, (hpb's) most of them are like 300 -400 pingers? umm..mager lagg and even worse when they play on uk server's i bet/ ) ) [1] => Array ( [0] => SimpleXMLElement Object ( [0] => 1998-04-25T213200Z ) ) [2] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [rdfabout] => http//boards.ie/vbulletin/showpost.php?p=67075 ) ) ) 
) 

しかし、出力としてノードのコンテンツのみが必要です。つまり、Array([0]=>Arrayなどはありません。

出力は次のようになります。

zero, those players that are trialing for hib team, (hpb's) most of them are like 300 -400 pingers? umm..mager lagg and even worse when they play on uk server's i bet

1998-04-25T213200Z

http//boards.ie/vbulletin/showpost.php?p=67075

前もって感謝します

4

3 に答える 3

1

を使用current()して、各 XPath 結果 (配列) の最初の要素のみを取得し、(string)キャストを使用してノードの内容を取得できます。

$products[0] = (string)current($xml->xpath("/sioctBoardPost/sioccontent"));
$products[1] = (string)current($xml->xpath("/sioctBoardPost/dctermscreated"));
$products[2] = (string)current($xml->xpath("/sioctBoardPost/@rdfabout"));
print_r($products);
于 2013-01-17T06:01:17.720 に答える
0

ご覧のとおり、xpath()メソッドは一致したノードの配列を返すため、返された配列の要素を処理する必要があります。この場合、これはうまくいくと思います:

$xml = simplexml_load_file("boards.xml");
$products[0] = $xml->xpath("/sioctBoardPost/sioccontent")[0];
$products[1] = $xml->xpath("/sioctBoardPost/dctermscreated")[0];
$products[2] = $xml->xpath("/sioctBoardPost/@rdfabout")[0];
print_r($products);
于 2013-01-17T05:53:02.580 に答える
0

これにより、必要なものが得られるはずです...

foreach ($products as $product) { // iterate through the $products array
    print $product[0]->nodeValue  // output the node value of the SimpleXMLElement Object
}
于 2013-01-17T06:06:50.370 に答える