0

こんにちは、私は簡単な問題を抱えています。アトム XML 文字列を simplexml オブジェクトに変換したり、simplexml_load_data 関数を使用して変換しようとすると、多くの属性データがドロップされるようです。

私が持っている元の文字列のように

<?xml version="1.0" encoding="UTF-8"?>
<feed gd:kind="customsearch#search" xmlns="http://www.w3.org/2005/Atom" xmlns:cse="http://schemas.google.com/cseapi/2010" xmlns:gd="http://schemas.google.com/g/2005" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
 <title>Google Custom Search - flower</title>
 <id>tag:www.googleapis.com,2010-09-29:/customsearch/v1?q=flower&amp;&amp;num=10&amp;start=1&amp;safe=off</id>
 <author>
  <name>- Google Custom Search</name>
 </author>
 <updated>1970-01-16T10:55:22.093Z</updated>
 <opensearch:Url type="application/atom+xml" template="https://www.googleapis.com/customsearch/v1?q={searchTerms}&amp;num={count?}&amp;start={startIndex?}&amp;lr={language?}&amp;safe={cse:safe?}&amp;cx={cse:cx?}&amp;cref={cse:cref?}&amp;sort={cse:sort?}&amp;filter={cse:filter?}&amp;gl={cse:gl?}&amp;cr={cse:cr?}}&amp;googlehost={cse:googleHost?}&amp;c2coff={?cse:disableCnTwTranslation}&amp;hq={cse:hq?}&amp;hl={cse:hl?}&amp;siteSearch={cse:siteSearch?}&amp;siteSearchFilter={cse:siteSearchFilter?}&amp;exactTerms={cse:exactTerms?}&amp;excludeTerms={cse:excludeTerms?}&amp;linkSite={cse:linkSite?}&amp;orTerms={cse:orTerms?}&amp;relatedSite={cse:relatedSite?}&amp;dateRestrict={cse:dateRestrict?}&amp;lowRange={cse:lowRange?}&amp;highRange={cse:highRange?}&amp;searchType={cse:searchType?}&amp;fileType={cse:fileType?}&amp;rights={cse:rights?}&amp;imgsz={cse:imgsz?}&amp;imgtype={cse:imgtype?}&amp;imgc={cse:imgc?}&amp;imgcolor={cse:imgcolor?}&amp;alt=atom"/>
 <opensearch:Query role="request" title="Google Custom Search - flower" totalResults="98800000" searchTerms="flower" count="10" startIndex="1" inputEncoding="utf8" outputEncoding="utf8" cse:safe="off" cse:cx="g"/>
 <opensearch:Query role="cse:nextPage" title="Google Custom Search - flower" totalResults="98800000" searchTerms="flower" count="10" startIndex="11" inputEncoding="utf8" outputEncoding="utf8" cse:safe="off" cse:cx="0vv1rbg"/>
 <opensearch:totalResults>98800000</opensearch:totalResults>
 <opensearch:startIndex>1</opensearch:startIndex>

しかし、使用してxmlに変換すると

        $xml = simplexml_load_string($rs);
        print_r($xml);

私の出力は以下のようなものです。検索数、合計結果セットなどの重要な情報はすべて失われています..

SimpleXMLElement Object
(
    [title] => Google Custom Search - flower
    [id] => tag:www.googleapis.com,2010-09-29:/customsearch/v1?q=flower&cx=&num=10&start=1&safe=off
    [author] => SimpleXMLElement Object
        (
            [name] => Search Engine - Google Custom Search
        )

    [updated] => 1970-01-16T10:55:22.093Z
    [entry] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [id] => http://en.wikipedia.org/wiki/Flower
                    [updated] => 1970-01-16T10:55:22.093Z
                    [title] => <b>Flower</b> - Wikipedia, the free encyclopedia
                    [link] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [href] => http://en.wikipedia.org/wiki/Flower
                                    [title] => en.wikipedia.org
                                )

                        )

                    [summary] => A <b>flower</b>, sometimes known as a bloom or blossom, is the reproductive structure <br>  found in <b>flowering</b> plants (plants of the division Magnoliophyta, also called <b>...</b>
                )
4

1 に答える 1

2

これらの要素はなくなったわけではなく、別の名前空間にあるため、標準のダンプでそれらを「見る」ことができません。次のように繰り返し処理できます。

foreach ($xml->children('opensearch', TRUE) as $element) {
    echo $element->getName(), "\n";
}

where'opensearch'は名前空間プレフィックスを示しTRUE、完全な名前空間 URL の代わりにドキュメント固有のプレフィックスを使用したことを意味します。

于 2012-05-08T10:29:00.180 に答える