【问题标题】:Look up in XML-file using an array and create new array使用数组在 XML 文件中查找并创建新数组
【发布时间】:2017-11-09 14:08:48
【问题描述】:

我有一个数组 - 像这样:

Array ( [0] => abc [1] => def [2] => ghi )

我有一个 XML 文件 - 像这样:

<?xml version="1.0" encoding="utf-8" ?>
<ROOT>
  <SECTION>
    <PART1>abc</PART1>
    <PART2>111</PART2>
    <PART3>222</PART3>
  </SECTION>
  <SECTION>
    <PART1>def</PART1>
    <PART2>333</PART2>
    <PART3>444</PART3>
  </SECTION>
  <SECTION>
    <PART1>ghi</PART1>
    <PART2>555</PART2>
    <PART3>666</PART3>
  </SECTION>
</ROOT>

我需要在 XML 文件 PART1 中查找数组的所有值并将 PART2 输出到一个新数组中,然后看起来像这样:

Array ( [0] => 111 [1] => 333 [2] => 555 )

【问题讨论】:

  • 到目前为止你尝试过什么?请向我们展示您的一些代码,我们将尽我们所能为您提供帮助。请记住,StackOverflow 不是编码服务。
  • 很公平。我尝试了一个 foreach 循环 - 像这样: foreach ($xml->children() as $output) { if ($output->PART1 == $array) { $part2 = $output->PART2 }}

标签: php arrays xml


【解决方案1】:

SimpleXMLElement 类:

$arr = ['abc', 'def', 'ghi'];
$sxe = simplexml_load_file($your_xmlfile);
$part2 = [];

foreach ($sxe->SECTION as $s) {
    if (in_array($s->PART1, $arr)) $part2[] = (string) $s->PART2;
}
print_r($part2);

输出:

Array ( [0] => 111 [1] => 333 [2] => 555 ) 

【讨论】:

  • 我尝试了 RomanPerekrest 的建议并在 $part2[] = (string) $s->PART2; 周围添加了 { }但结果是 Array ( ) - 一个空数组...
  • @McClaud,检查您的代码是否有错误,并确保您使用的是有效的 xml
  • 我发现了错误 - 它不是 XML 文件。它是数组 ($arr)。我的数组是在另一个 foreach 循环中创建的,如下所示:foreach ($fixturesarray as $value) { if ($i++ % 9 == 4) { $arr[] = $value; }}。如何使数组在您建议的 foreach 循环中可用?
【解决方案2】:

您可以使用数组中的值来创建 Xpath 表达式,以获取您想要的值:

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

$keys = ['abc', 'def', 'ghi'];

$result = [];
foreach ($keys as $key) {
  $result[] = $xpath->evaluate('string(/ROOT/SECTION[PART1="'.$key.'"]/PART2)');
}

var_dump($result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2016-10-15
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多