8

リモート XML ベースの API に接続する PHP と XPath を使用しています。サーバーからの応答の例は次のとおりです。

    <OTA_PingRS>
        <Success />
        <EchoData>This is some test data</EchoData>
    </OTA_PingRS>

開始タグがないことがわかりますが、 Xpath<Success>を使用して存在を検索するにはどうすればよいですか?<Success />

ありがとうサイモン

4

3 に答える 3

10

<Success />要素はの要素であり、値がないことを意味します。開始タグと終了タグの両方です。

XPath関数を使用してノードの存在をテストできますboolean()

boolean 関数は、次のように引数をブール値に変換します。

  • 数値は、正または負のゼロでも NaN でもない場合にのみ真です。
  • ノードセットは、空でない場合にのみ true になります
  • 文字列の長さがゼロでない場合に限り、文字列は真です。
  • 4 つの基本型以外の型のオブジェクトは、その型に依存する方法でブール値に変換されます。

これを行うには、メソッドDOMXPathを使用する必要があります。DOMXPath::evaluate()これは、型指定された結果 (この場合は a ) を返すためbooleanです。

$xml = <<< XML
<OTA_PingRS>
    <Success />
    <EchoData>This is some test data</EchoData>
</OTA_PingRS>
XML;

$dom = new DOMDocument;
$dom->loadXml($xml);

$xpath = new DOMXPath($dom);
$successNodeExists = $xpath->evaluate('boolean(/OTA_PingRS/Success)');

var_dump($successNodeExists); // true

デモ


もちろん、クエリを実行し/OTA_PingRS/Successて、返された に結果があるかどうかを確認することもできDOMNodeListます。

$xml = <<< XML
<OTA_PingRS>
    <Success />
    <EchoData>This is some test data</EchoData>
</OTA_PingRS>
XML;

$dom = new DOMDocument;
$dom->loadXml($xml);

$xpath = new DOMXPath($dom);
$successNodeList = $xpath->evaluate('/OTA_PingRS/Success');

var_dump($successNodeList->length);

デモ


SimpleXMLも使用できます。

$xml = <<< XML
<OTA_PingRS>
    <Success />
    <EchoData>This is some test data</EchoData>
</OTA_PingRS>
XML;

$nodeCount = count(simplexml_load_string($xml)->xpath('/OTA_PingRS/Success'));

var_dump($nodeCount); // 1
于 2012-09-05T20:47:32.570 に答える
0

関数を使用boolval($xpath)して、存在を確認したい xpath のブール値を確認します。

于 2014-11-20T09:15:49.263 に答える