1

以下にリストされているように、すべてのノードに CDATA 情報を含むリモートの場所から xml ファイルからデータを取得したいと考えています。次の PHP 関数を使用してそのような情報を取得しますが、機能せず、xml ファイルから CDATA タグをキャッチできないようです。問題は、私のコードが正しいかどうかです。それが間違っている場合は、要求された情報を取得するための php コードを提案できますか?

<Items>
      <Item ID="1">
          <Name>Mountain</Name>
          <Properties>
              <Property Code="feature"><![CDATA[<ul><li>sample text</li></ul>]]></Property>
              <Property Code="SystemRequirements"><![CDATA[Windows XP/Windows Vista]]></Property>
              <Property Code="Description" Type="plain"><![CDATA[sample text2]]></Property>
          </Properties>
      </Item>
<Items>

これは私のphpコードです:

  <?
    function xmlParse($file, $wrapperName, $callback, $limit = NULL) {
        $xml = new XMLReader();
        if (!$xml->open($file)) {
            die("Failed to open input file.");
        }
        $n = 0;
        $x = 0;
        while ($xml->read()) {
            if ($xml->nodeType == XMLReader::ELEMENT && $xml->name == $wrapperName) {
                while ($xml->read() && $xml->name != $wrapperName) {
                    if ($xml->nodeType == XMLReader::ELEMENT) {
                        //$subarray[]=$xml->expand();
                        $doc = new DOMDocument('1.0', 'UTF-8');
                        $simplexml = simplexml_import_dom($doc->importNode($xml->expand(), true));
                        $subarray[]=$simplexml;
                    }
                }
                if ($limit == NULL || $x < $limit) {
                    if ($callback($subarray)) {
                        $x++;
                    }
                    unset($subarray);
                }
                $n++;
            }
        }
        $xml->close();
    }

    echo '<pre>';

    function func1($s) {
        print_r($s);
    }

    xmlParse('myfile.xml', 'Item', 'func1', 100);

このオブジェクトを print_r($s); で出力すると 結果に CDATA が表示されません。CDATA コンテキストを取得する方法はありますか?

4

2 に答える 2

1

文字列のように扱う

$file = "1.xml";
$xml = simplexml_load_file($file);
foreach($xml->Item->Properties->children() as $properties) {
    printf("%s", $properties);
}

出力

<ul><li>sample text</li></ul>
Windows XP/Windows Vista
sample text2
于 2013-06-22T10:17:24.173 に答える
0

DOMDocument を使用して xml ファイルを開く方法は常にあります。次に例を示します。

$xmlFile = new DOMDocument();
$xmlFile->load(myfile.xml);
echo $xmlFile->getElementsByTagName('Property')->item(0)->nodeValue;
于 2013-06-22T10:14:13.353 に答える