問題 cURL と PHP を使用して、Wordpress サイトから XML-RPC (wp.getCategories または metaWeblog.getCategories) 経由でカテゴリのリストを取得していますが、非常に複雑に見えるため、応答の解析に問題があります。
私のコードは応答を解析し、単純なドロップダウン メニューを作成する必要があります。
これは実際に動作するコードであるとは想定されていませんが、動作するようにどのように描写するか:
$xml = simplexml_load_string($categories);
$select_string = "<select name=\"cats\">";
foreach ($xml as $category) {
$select_string .= "<option value=\"" . $category->value . "\">" . $category->name . "</option>";
}
$select_string .= "</select>";
そして、私が解析しようとしている応答は次のとおりです (これは simplexml_load_string が出力するものです):
SimpleXMLElement Object
(
[param] => SimpleXMLElement Object
(
[value] => SimpleXMLElement Object
(
[array] => SimpleXMLElement Object
(
[data] => SimpleXMLElement Object
(
[value] => Array
(
[0] => SimpleXMLElement Object
(
[struct] => SimpleXMLElement Object
(
[member] => Array
(
[0] => SimpleXMLElement Object
(
[name] => categoryId
[value] => SimpleXMLElement Object
(
[string] => 4
)
)
[1] => SimpleXMLElement Object
(
[name] => parentId
[value] => SimpleXMLElement Object
(
[string] => 0
)
)
[2] => SimpleXMLElement Object
(
[name] => description
[value] => SimpleXMLElement Object
(
[string] => News
)
)
[3] => SimpleXMLElement Object
(
[name] => categoryDescription
[value] => SimpleXMLElement Object
(
[string] => SimpleXMLElement Object
(
)
)
)
[4] => SimpleXMLElement Object
(
[name] => categoryName
[value] => SimpleXMLElement Object
(
[string] => News
)
)
[5] => SimpleXMLElement Object
(
[name] => htmlUrl
[value] => SimpleXMLElement Object
(
[string] => http://lubranochiropractic.com/category/news/
)
)
[6] => SimpleXMLElement Object
(
[name] => rssUrl
[value] => SimpleXMLElement Object
(
[string] => http://lubranochiropractic.com/category/news/feed/
)
)
)
)
)
[1] => SimpleXMLElement Object
(
[struct] => SimpleXMLElement Object
(
[member] => Array
(
[0] => SimpleXMLElement Object
(
[name] => categoryId
[value] => SimpleXMLElement Object
(
[string] => 5
)
)
[1] => SimpleXMLElement Object
(
[name] => parentId
[value] => SimpleXMLElement Object
(
[string] => 4
)
)
[2] => SimpleXMLElement Object
(
[name] => description
[value] => SimpleXMLElement Object
(
[string] => Testimonials
)
)
[3] => SimpleXMLElement Object
(
[name] => categoryDescription
[value] => SimpleXMLElement Object
(
[string] => SimpleXMLElement Object
(
)
)
)
[4] => SimpleXMLElement Object
(
[name] => categoryName
[value] => SimpleXMLElement Object
(
[string] => Testimonials
)
)
[5] => SimpleXMLElement Object
(
[name] => htmlUrl
[value] => SimpleXMLElement Object
(
[string] => http://lubranochiropractic.com/category/news/testimonials/
)
)
[6] => SimpleXMLElement Object
(
[name] => rssUrl
[value] => SimpleXMLElement Object
(
[string] => http://lubranochiropractic.com/category/news/testimonials/feed/
)
)
)
)
)
[2] => SimpleXMLElement Object
(
[struct] => SimpleXMLElement Object
(
[member] => Array
(
[0] => SimpleXMLElement Object
(
[name] => categoryId
[value] => SimpleXMLElement Object
(
[string] => 1
)
)
[1] => SimpleXMLElement Object
(
[name] => parentId
[value] => SimpleXMLElement Object
(
[string] => 0
)
)
[2] => SimpleXMLElement Object
(
[name] => description
[value] => SimpleXMLElement Object
(
[string] => Uncategorized
)
)
[3] => SimpleXMLElement Object
(
[name] => categoryDescription
[value] => SimpleXMLElement Object
(
[string] => SimpleXMLElement Object
(
)
)
)
[4] => SimpleXMLElement Object
(
[name] => categoryName
[value] => SimpleXMLElement Object
(
[string] => Uncategorized
)
)
[5] => SimpleXMLElement Object
(
[name] => htmlUrl
[value] => SimpleXMLElement Object
(
[string] => http://lubranochiropractic.com/category/uncategorized/
)
)
[6] => SimpleXMLElement Object
(
[name] => rssUrl
[value] => SimpleXMLElement Object
(
[string] => http://lubranochiropractic.com/category/uncategorized/feed/
)
)
)
)
)
)
)
)
)
)
)
foreachステートメントでこれを使用してメンバーの配列を反復しようとしましたが、機能しません:
$xml->param->value->array->data->value->struct->member;
ここでデータを簡単に解析する簡単な方法を知っている人はいますか?
実際の XML:
<!--?xml version="1.0"?-->
<methodresponse>
<params>
<param>
<value>
<array><data>
<value><struct>
<member><name>categoryId</name><value><string>4</string></value></member>
<member><name>parentId</name><value><string>0</string></value></member>
<member><name>description</name><value><string>News</string></value></member>
<member><name>categoryDescription</name><value><string></string></value></member>
<member><name>categoryName</name><value><string>News</string></value></member>
<member><name>htmlUrl</name><value><string>http://lubranochiropractic.com/category/news/</string></value></member>
<member><name>rssUrl</name><value><string>http://lubranochiropractic.com/category/news/feed/</string></value></member>
</struct></value>
<value><struct>
<member><name>categoryId</name><value><string>5</string></value></member>
<member><name>parentId</name><value><string>4</string></value></member>
<member><name>description</name><value><string>Testimonials</string></value></member>
<member><name>categoryDescription</name><value><string></string></value></member>
<member><name>categoryName</name><value><string>Testimonials</string></value></member>
<member><name>htmlUrl</name><value><string>http://lubranochiropractic.com/category/news/testimonials/</string></value></member>
<member><name>rssUrl</name><value><string>http://lubranochiropractic.com/category/news/testimonials/feed/</string></value></member>
</struct></value>
<value><struct>
<member><name>categoryId</name><value><string>1</string></value></member>
<member><name>parentId</name><value><string>0</string></value></member>
<member><name>description</name><value><string>Uncategorized</string></value></member>
<member><name>categoryDescription</name><value><string></string></value></member>
<member><name>categoryName</name><value><string>Uncategorized</string></value></member>
<member><name>htmlUrl</name><value><string>http://lubranochiropractic.com/category/uncategorized/</string></value></member>
<member><name>rssUrl</name><value><string>http://lubranochiropractic.com/category/uncategorized/feed/</string></value></member>
</struct></value>
</data></array>
</value>
</params>
</methodresponse>
ありがとう。リック
最終的な解決策 (E_p の助けを借りて) これにより、wp.getCategories または metaWeblog.getCategories からの XML-RPC 応答からカテゴリのドロップダウン メニューが作成されます。
$categories = wpGetCategories($url, $username, $password);
$select_string = "<select name=\"cats\">";
$xml = simplexml_load_string($categories);
foreach ($xml->params->param->value->array->data->value as $dataSet) {
foreach ($dataSet->struct->member as $member) {
if ($member->name == "categoryId") $cat_id = $member->value->string;
if ($member->name == "description") $cat_name = $member->value->string;
}
$select_string .= "<option value=\"" . $cat_id . "\">" . $cat_name . "</option>";
}
$select_string .= "</select>";