PHP XML XPATH节点元素迭代并插入到数组中

Ok, so I thought I had this nailed , but sadly not . I have this XML:

//XML
this is root--> <story> 
<article>
<title>my title </title>
<img>my image </img>
<link>my link </link
</article>
</story>

and then this 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;

So what I'm trying to do is get the 'Title' 'Img' and 'Link' values and insert them into a pre existing array. The array already outputs fine with the previously entered values, but I then need to be able to output the results of the updated array in this way:

    printf(
                    '<input name="ads[%1$s][title]" value="%2$s" style="width:310px;" /><br />',
                    $availAd['image'],
                    $availAd['title']
                );

The issue is right now , the foreach returns NULL for $currentTitle , $imagearray and $linkarray

duangou1953
duangou1953 ,我非常感谢你的帮助,这个:stackoverflow.com/questions/5418763/...几乎解决了我的问题,但没有正确插入数组,因此我觉得需要适当的引用。我将发布我所在的另一个帖子。再次感谢。
9 年多之前 回复
dounuo7954
dounuo7954 我已经在stackoverflow.com/questions/5418763/...中向您展示过。您所要做的就是使用nodeName作为数组键,使用nodeValue作为数组值,并相应地更改printf。
9 年多之前 回复
doucaigai7176
doucaigai7176 我该如何获得零件?我已经尝试了项目(0)等。
9 年多之前 回复
douchengfei3985
douchengfei3985 我添加了更多。XML非常简单,PHP是大型项目的一部分,并不容易自包含。这部分应该按原样运行,因为没有其他变量。我只是将XML放入并希望将数组输出。
9 年多之前 回复
douya1248
douya1248 你能提供一个独立的例子吗?即一个“完整的”xml文档和一个“runnable”php脚本显示错误。
9 年多之前 回复
doufu9521
doufu9521 您无法直接通过其标记名访问DOMElement的子项。如果需要,请使用SimpleXml。
9 年多之前 回复
drutjkpsr67393592
drutjkpsr67393592 对不起,那是个错误。所有这些都是“$article”而不是$currentimg或$currentlink
9 年多之前 回复
dongying9756
dongying9756 $currentimg设置在哪里?
9 年多之前 回复
dty98339
dty98339 问题是$currentimg->img等不起作用。对于Foreach中的每个值,它都为NULL
9 年多之前 回复
dongnianchou7047
dongnianchou7047 重新标记为xpathengines,因为这是指特定XPath引擎结果的数据类型。
9 年多之前 回复
dqvy87517
dqvy87517 究竟是什么问题?对不起,我一定不能很好地阅读你的问题。
9 年多之前 回复

2个回答

As Gordon said: you need simplexml instead of domdocument/domxpath if you want to access child elements like $parent->childelements.
And you probably want to "group" the elements you put into the array for each article element, i.e. instead of
array_push($arr, $x, $y, $z);
you probably want
array_push($arr, array($x, $y, $z));

self-contained example:

<?php
$doc = getDoc();
$arr = foo($doc);
foreach($arr as $ad) {
  echo $ad['title'], " ", $ad['img'], "
";
}

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
  );
}

prints

title 1.1 my image 1.1
title 1.2 my image 1.2
title 2.1 my image 2.1
dtbam62840
dtbam62840 谢谢! 通过一些修改,这正是我需要做的。
9 年多之前 回复

Try something like this:

$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);
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问