요소 유형별 PHP SimpleXML 그룹
문제
좋아, 여기 내 딜레마가 있습니다. 나는 그룹에서 데이터를 통합하는 방법을 찾고 있습니다. php의 단순 렉스 ML. 내가 의미하는 바는 다음과 같습니다.
다음과 같이 보이는 XML이 있다고 가정 해 봅시다.
<favorites>
<interesting>
<type>Movie</type>
<character>James Bond</character>
<name>Casino Royale</name>
</interesting>
<interesting>
<type>Movie</type>
<character>Jason Bourne</character>
<name>Bourne Identity</name>
</interesting>
<interesting>
<type>Book</type>
<character>Lindsay Ford</character>
<name>Shantaram</name>
</interesting>
</favorites>
이제 여기에 내가 원하는 모습이 있습니다.
영화
- 카지노 로얄 - 제임스 본드 본
- Bourne Identity -Jason Bourne
책
- Shantaram -Lindsay Ford
도와주세요!! 혼란스러운 것이 있으면 알려주세요.
해결책
영화 유형을 미리 알지 못하면 다음을 수행 할 수 있습니다.
- XML 데이터에서 모든 유형을 추출하십시오
- 여러 번 나타날 수 있으므로 독창적으로 얻습니다 (XPath로 수행 할 수있는 방법이있을 수 있습니다. 모르겠습니다.
array_unique
)
- 여러 번 나타날 수 있으므로 독창적으로 얻습니다 (XPath로 수행 할 수있는 방법이있을 수 있습니다. 모르겠습니다.
- 이러한 유형을 반복하여 무엇을 사용하십시오 @mark 제안.
이런 일은 아마도 다음과 같습니다.
$xml = simplexml_load_string($xmlData);
$typesListXml = $xml->xpath('interesting/type');
var_dump($typesListXml); // var_dump #1
if (!empty($typesListXml)) {
$typesList = array();
foreach ($typesListXml as $typeXml) {
$typesList[] = (string)$typeXml;
}
var_dump($typesList); // var_dump #2
$typesList = array_unique($typesList);
var_dump($typesList); // var_dump #3
$moviesForType = array();
foreach ($typesList as $type) {
$rawData = $xml->xpath('interesting[type="' . $type . '"]');
if (!empty($rawData)) {
foreach ($rawData as $rawMovie) {
$moviesForType[$type][] = $rawMovie->name . ' - ' . $rawMovie->character;
}
}
}
var_dump($moviesForType); // var_dump #4
// Up to you to present $moviesForType the way you want ;-)
}
그리고 일을 쉽게 이해하기 위해 Var_dump의 출력은 다음과 같습니다.
var_dump #1 :
array
0 =>
object(SimpleXMLElement)[2]
string 'Movie' (length=5)
1 =>
object(SimpleXMLElement)[3]
string 'Movie' (length=5)
2 =>
object(SimpleXMLElement)[4]
string 'Book' (length=4)
var_dump #2 :
array
0 => string 'Movie' (length=5)
1 => string 'Movie' (length=5)
2 => string 'Book' (length=4)
var_dump #3 :
array
0 => string 'Movie' (length=5)
2 => string 'Book' (length=4)
var_dump #3 :
array
'Movie' =>
array
0 => string 'Casino Royale - James Bond' (length=26)
1 => string 'Bourne Identity - Jason Bourne' (length=30)
'Book' =>
array
0 => string 'Shantaram - Lindsay Ford' (length=24)
이제 원하는 방식으로 해당 데이터를 제시하는 것은 귀하에게 달려 있습니다. 이중 연장 루프 구성 <ul>
그리고 <li>
태그는 아마도 할 것입니다 ;-)
다른 팁
나는 당신이 xpath를 찾고 있다고 믿습니다 :
$xmlData = '<favorites>...</favorites>';
$xml = simplexml_load_string($xmlData);
$arrMovies = $xml->xpath('interesting[type="Movie"]');
$arrBooks = $xml->xpath('interesting[type="Book"]');
그런 다음 $ Arrmovies와 $ Artubes를 반복하고 필요한 것을 인쇄 할 수 있습니다.
foreach($arrMovies as $movie) {
echo $movie->name;
}
제휴하지 않습니다 StackOverflow