将多个 XML 节点的数据混合到一个 PHP 变量中
我试图找出如何使用 SimpleXML 将此 XML 文件的 FIPS 部分合并到一个 php 变量中。
我尝试使用的示例 xml 文件位于 http://codepad.org/MQeR2VBZ
基本上我想要一个其中包含“001033,001077”的变量(不带引号)
我是 PHP 新手,这是我第一次使用 stackoverflow,所以如果我充满失败,请原谅我
I am trying to find out how to merge the FIPS part of this XML file into one php variable with SimpleXML.
a sample xml file I'm trying to use is at http://codepad.org/MQeR2VBZ
basically i want a variable with "001033,001077" in it (without the quotes"
I'm new to PHP and this is my first time using stackoverflow so please forgive me if I'm full of fail
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 XPath 轻松解决此问题。
XPath 允许您以几乎任何可能的组合查询文档中的节点。要查询前面带有内容 FIPS6 的 valueName 元素的地理编码值,您可以使用此查询:
但是,文档有一个默认的命名空间 用于警报元素(如 xmlns 属性所示)。默认情况下,SimpleXml 将无法通过 XPath 访问文档中的任何命名空间节点,直到我们通过
registerXPathNamespace
并为查询中的任何元素添加任意前缀。XPath 的结果将是一个包含 SimpleXmlElements 的数组。当您将 SimpleXmlElement 转换为字符串(或在字符串上下文中使用它)时,它将返回它的 nodeValue,这是您实际想要组合的值,因此您可以简单地对结果数组调用
implode
将值组合成一个字符串。代码(演示)
You can solve this easily with XPath.
XPath lets you query for nodes in the document in almost any possible combination. To query for the geocode value that is preceded by a valueName element with the content FIPS6, you can use this query:
However, the document has a default namespace for the alert element (as indicated by the xmlns attribute). By default, SimpleXml will not be able to access any namespaced nodes in the document via XPath until we tell it the namespace via
registerXPathNamespace
and prefix any elements in the query with an arbitrary prefix.The result of the XPath will be an array containing SimpleXmlElements. When you cast a SimpleXmlElement to string (or use it in a string context), it will return it's nodeValue, which is the values you actually want to combine, so you can simply call
implode
on the resulting array to combine the values into a string.Code (demo)
这应该让您开始走上正确的道路:
This should get you started on the right path: