すべてのノードの XML ファイルで文字列の検索を作成する必要があります。
---catalog.xml---
<?xml version="1.0" encoding="ISO-8859-1"?>
<Catalog>
<Category>
<Name>Biscuit</Name>
<Location>
<Id>Butter</Id>
<Description>The butter biscuit cost $10 per pack</Description>
</Location>
<Location>
<Id>Chocolate</Id>
<Description>The chocolate biscuit cost $20 per pack</Description>
</Location>
</Category>
<Category>
<Name>Cake</Name>
<Location>
<Id>Cup</Id>
<Description>This is a cup cake</Description>
</Location>
<Location>
<Id>Slice</Id>
<Description>This is a slice cake</Description>
</Location>
</Category>
</Catalog>
---search.php---
<?php
$catalog = simplexml_load_file("catalog.xml");
$category = $catalog->Category;
$location = $category->Location;
foreach($location->Description as $desc)
{
$string = string($desc);
$find = 'chocolate';
$result = strpos($string, $find)
if ($result !== false)
{
echo $result;
}
else
{
echo "No Result";
}
}
?>
私が受け取ったエラーは次のとおりです。
Parse error: syntax error, unexpected T_IF on line 14
ノードとノードに「チョコレート」があるので、両方のノードの結果を表示する必要があります。
----新しい改正コード / 2012 年 11 月 20 日 ---
<?php
$catalog = simplexml_load_file("catalog.xml");
$find = "chocolate";
$lcFind = strtolower($find);
$ll = implode('', range('a', 'z'));
$ul = strtoupper($ll);
$xpath_result = $catalog->xpath("//*[contains(translate(text(), '$ul','$ll'),'$lcFind')]");
if ($xpath_result) {
foreach ($xpath_result as $res) {
$category = $catalog->Category;
$name = $category->Name;
$loc = $category->Location;
$id = $loc->Id;
echo "Category: ", $name, "<br />";
echo "ID: ", $id, "<br />";
echo "Description :", $res, "<br />";
}
}
else {
echo "No matching descriptions found for word '<i>$find</i>'<br />";
}
?>
結果 (間違い):
カテゴリ: ビスケット ID: バター //これは「チョコレート」である必要があります 説明 :チョコレート //これは「チョコレート」の説明である必要があります カテゴリ: ビスケット ID: バター 説明 :チョコレート ビスケットの価格は 1 パックあたり 20 ドルです