0
<Node name="node1">
  <x x="x"/>
  <x x="xxx"/>
</Node>

<Node name="node2">
  <x x="xx"/>
  <x x="xxxx"/>
</Node>

わかりました、これは XML サンプルです:

simplexml_load_file を使用してそのコンテンツを呼び出します

特定のノードコンテンツを呼び出したい場合は、次のようにする必要があります。

$xml = simplexml_load_file('file.xml');
$contents = $xml->node1

ノードオブジェクトを呼び出す

$contents = $xml->node1->x

問題は、ノード名を指定せずにオブジェクト「x」を呼び出す方法です。

上記で追加したサンプルに 2 つのノードがあることに気付きました

そこから x を呼び出すには、nodename に言及してから x に言及する必要があります

XML全体からすべての「x」を呼び出したい

どのように可能ですか?

4

1 に答える 1

1

SimpleXMLElement :: xpath()は、心配する名前空間がない場合にトリックを実行します。名前空間がある場合は...SimpleXMLElement:: registerXPathNamespace()が必要です。

<?php
$xml = <<<EOT
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<Node name="node1">
  <x x="x"/>
  <x x="xxx"/>
</Node>

<Node name="node2">
  <x x="xx"/>
  <x x="xxxx"/>
</Node>
</root>
EOT;

// Original question
$s = new SimpleXMLElement($xml);
$r = $s->xpath('//Node/x');
var_dump($r);

// Something about names
$r2 = $s->xpath('Node[@name]');
$names = array();
foreach($r2 as $elem){
  $names[] = "{$elem['name']}";
}
var_dump($names);

// RoseWarad's answer (more efficient than "something about names")
$r3 = $s->xpath('*/@name');
var_dump($r3);

?>
于 2012-05-30T20:28:10.187 に答える