【问题标题】:Show all items that Match in XML using PHP使用 PHP 显示在 XML 中匹配的所有项目
【发布时间】:2013-07-27 04:03:21
【问题描述】:

这是我的 XML 文件,名为:full.xml


我需要你的帮助。我需要一个打开“full.xml”的 PHP 脚本 并且仅显示具有 .email

的节点的所有值

我想要的输出示例:
sales@company1.com
sales@company2.com
sales@company3.com

谢谢!我会非常感谢你!

编辑

$Connect = simplexml_load_file("full.xml");
return $Connect->table[0]->*.email;

【问题讨论】:

  • 请向我们展示您尝试过的代码,我们将尽我们所能提供帮助。这是一个很好的起点:php.net/manual/en/class.xmlreader.php
  • 我试过了:$Connect = simplexml_load_file("full.xml"); return $Connect->table[0]->*.email;
  • 结果如何?
  • 它什么都不知道。
  • 但这:$Connect = simplexml_load_file("full.xml");返回 $Connect->table[0]->company1.email;此脚本:显示:sales@company1.com

标签: php xml match


【解决方案1】:

您的 XML 设计不是很聪明。使用此xpath 表达式,您可以选择名称末尾带有.email 的所有节点:

$xml = simplexml_load_string($x); // assume XML in $x
$results = $xml->xpath("//*[substring(name(),string-length(name())-" . (strlen('.email') - 1) . ") = '.email']");

--> 结果是一个包含选定节点的数组。

顺便说一句:如果您有机会更改 XML 的结构,请避免在节点名称中组合信息,例如 <company1.email>,但要这样做:

...
<companies>
    <company id="1">
        <email>info@company1.com</email>
        <tel>+498988123456</tel>
        <name>somename</name>
    </company>
    <company id="2">
        <email>info@company2.com</email>
        <tel>+498988123457</tel>
        <name>someothername</name>
    </company>
</companies>
....

它会更容易阅读和解析。

【讨论】:

  • 嘿,这是个好主意!我怎样才能做出这样的事情?
  • @Manuel 如果您从其他地方获得该 XML,您将无法做到这一点。如果您是 XML 的作者,您可以。请考虑通过单击左侧的勾号来接受我的回答。
猜你喜欢
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多