好的,所以我以为我已经钉了这个,但遗憾的是没有。我有这个XML:
//XML
this is root--> <story>
<article>
<title>my title </title>
<img>my image </img>
<link>my link </link
</article>
</story>
然后这个PHP:
//php
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadXML($_SESSION['xml']);
$xpath = new DOMXPath($dom);
$query = $xpath->query('//section/article');
foreach($query as $article ):
$currentTitle = $article->title ;
//edit - mistake in code - $article used for all
//$imagearray = $currentimg->img ;
//$linkarray = $currentlink->link ;
array_push( $availAds,$currentTitle,$imagearray,$linkarray );
endforeach;
所以我要做的就是获取'Title''Img'和'Link'值并将它们插入到预先存在的数组中。数组已经输出了先前输入的值,但我需要能够以这种方式输出更新数组的结果:
printf(
'<input name="ads[%1$s][title]" value="%2$s" style="width:310px;" /><br />',
$availAd['image'],
$availAd['title']
);
问题是现在,foreach为$ currentTitle返回NULL,$ imagearray和$ linkarray
答案 0 :(得分:2)
正如戈登所说:如果你想访问像$ parent-&gt; childelements这样的子元素,你需要simplexml而不是domdocument / domxpath。
并且您可能希望将每个文章元素放入数组中的元素“分组”,即代替中
array_push($arr, $x, $y, $z);
你可能想要
array_push($arr, array($x, $y, $z));
自包含的例子:
<?php
$doc = getDoc();
$arr = foo($doc);
foreach($arr as $ad) {
echo $ad['title'], " ", $ad['img'], "\n";
}
function foo(SimpleXMLElement $doc) {
$availAds = array();
$query = '//section/article';
foreach( $doc->xpath($query) as $article ) {
$currentTitle = $article->title ;
//edit - mistake in code - $article used for all
//$imagearray = $currentimg->img ;
//$linkarray = $currentlink->link ;
array_push( $availAds, array(
'title'=>(string)$article->title, // without the (string) cast
'img'=>(string)$article->img, // you'd store simplexmlelement instances
'link'=>(string)$article->link // which _might or might not_ be what you want
));
}
return $availAds;
}
function getDoc() {
return new SimpleXMLElement( <<< eoxml
<story>
<section>
<article>
<title>title 1.1</title>
<img>my image 1.1</img>
<link>my link 1.1</link>
</article>
<article>
<title>title 1.2</title>
<img>my image 1.2</img>
<link>my link 1.2</link>
</article>
</section>
<section>
<article>
<title>title 2.1</title>
<img>my image 2.1</img>
<link>my link 2.1</link>
</article>
</section>
</story>
eoxml
);
}
打印
title 1.1 my image 1.1
title 1.2 my image 1.2
title 2.1 my image 2.1
答案 1 :(得分:0)
尝试这样的事情:
$xml="<story>
<article>
<title>my title</title>
<img>my image</img>
<link>my link</link>
</article>
</story>
";
$xml = new SimpleXMLElement($xml);
$availAds = array();
foreach($xml->article as $article):
$currentTitle = (string)$article->title ;
array_push( $availAds, $currentTitle );
endforeach;
print_r($availAds);