Первый пример того, как это можно сделать (используя XPath и расширение DOM php
<?php
$id = '19837775'; // this is the parameter you'd fetch from the url
$doc = new DOMDocument;
//$doc->load('feed.xml');
$doc->loadxml( getData() );
$xpath = new DOMXPath($doc);
foreach ( $xpath->query('story[@article_content="'.$id.'"]') as $story ) {
echo $doc->savexml($story);
}
function getData() {
return <<< eox
<stories>
<story article_content="1">content 1</story>
<story article_content="2">content 2</story>
<story article_content="19837775">content 19837775</story>
<story article_content="22222222">content 22222222</story>
</stories>
eox;
}
печать
<story article_content="19837775">content 19837775</story>
.... но, в конце концов, это не очень хорошее решение. Это зависит от того, чего вы на самом деле пытаетесь достичь (и насколько масштабным должно быть решение).
Пожалуйста, уточните.
обновление: пример использования фактической структуры данных.
<?php
$id = '19837775'; // the parameter fetched from the request
$doc = new DOMDocument;
//$doc->load('feed.xml');
$doc->loadxml( getData() );
$xpath = new DOMXPath($doc);
$article = firstNode( $xpath->query('article_content[@id="'.$id.'"]') );
if ( !$article ) {
die('no such article');
}
$title = firstNode( $xpath->query('title', $article) );
$date = firstNode( $xpath->query('date', $article) );
$body = firstNode( $xpath->query('body', $article) );
// TODO: check $title, $data and $body
echo 'title: ', $title->nodeValue, "\n";
echo 'date: ', $title->nodeValue, "\n";
echo 'body: ', $doc->savexml($body), "\n";
echo 'body->nodeValue: ', $body->nodeValue;
die;
function firstNode($nodelist) {
if ( $nodelist instanceof DOMNodeList && 0<$nodelist->length ) {
return $nodelist->item(0);
}
return false;
}
function getData() {
return <<< eox
<channel>
<article_content id="1" status="X"></article_content>
<article_content id="19837775" status="A">
<title>title of article 1</title><date>20120127</date><time>10:18:00</time>
<body><h1>main body of story 1</h1><p>Not just plain text</p></body>
<introduction>intro text here</introduction><abstract></abstract><by_line></by_line><category_id>0103</category_id>
</article_content>
<article_content id="20000000" status="X"></article_content>
<article_content id="20000001" status="X"></article_content>
</channel>
eox;
}
печать
title: title of article 1
date: title of article 1
body: <body><h1>main body of story 1</h1><p>Not just plain text</p></body>
body->nodeValue: main body of story 1Not just plain text
Возможно, вас также заинтересует https://en.wikipedia.org/wiki/XSLTXSL, который также использует XPath для выбора узлов, но позволяет преобразовать вывод (например, из вашего xml-представления в удобный HTML-формат).