【问题标题】:Filter an XML file过滤 XML 文件
【发布时间】:2014-01-28 19:40:14
【问题描述】:

我正在尝试使用表单来过滤 XML 文件,并且不得不使用 xpath 来获得所需的结果。

<?php
$filterHeading = 'CD';
$filterText = '1989';

$filename = "xml/xml_cd.xml";
$xml = simplexml_load_file($filename);

echo 

$result = $xml->xpath('//' + $filterHeading + '[YEAR="' + $filterText + '"]');

print_r($result);


?>

我的目标是使用这个 PHP 脚本最终从网页中获取变量(标题/文本)并以 JSON 格式显示。但是我无法让 XML 过滤器本身工作 - 有什么想法吗?

提前致谢!

编辑

XML

<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
</CATALOG>

【问题讨论】:

  • 你能添加一个你试图解析的 XML 的 sn-p 吗?
  • 添加为 na 编辑 - 感谢您的快速回复!

标签: php xml json xpath


【解决方案1】:

节点YEAR本身不等于1989,它里面的文本是。所以

//CD[YEAR/text()="1989"]

会成功的。在您的代码中:

$result = $xml->xpath('//'.$filterHeading.'[YEAR/text()="'.$filterText.'"]');

【讨论】:

  • 注意:数组到字符串的转换在 H:\University\Year 3\Web\XAMMP\xampp-portable\htdocs\Assignment\filter.php 第 12 行 ArrayArray ( ) 我不断收到此错误消息不管我怎么做。 (这里是 PHP 新手)如果可能的话我还想保持使用变量,以便以后扩展
  • 挖掘旧记忆后,在 PHP 中使用 . 完成连接...尝试更新答案。
  • 再次感谢您的快速回复!我在与以前相同的行上再次遇到相同的错误。 “$result =..”我似乎不明白为什么!
  • 尝试在没有文件的情况下重新创建它:pastebin.com/GmquXEuN,它似乎可以工作...您应该尝试检查simplexml_load_file 是否为您提供了预期的输出(与SimpleXMLElement 相同)。告诉我!
  • 确认 simplexml_load_file($filename) 与 if == FALSE 语句一样正常工作。 Edit也打印得很好(对不起,大脑崩溃了!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2015-03-14
  • 2013-05-29
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多