ikr /xml-fu
查询XML的便捷实用函数。最初编写是为了简化处理SOAP响应。
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-14 14:46:42 UTC
README
关于
查询XML的便捷实用函数。最初编写是为了简化处理原始SOAP响应,但也可以在一般用途中发挥作用,允许以更函数式的方式从XML中提取数据。
安装
需要PHP 5.3+和Composer。
composer require ikr/xml-fu:~1.1
API
核心
XmlFu\value($xml, $xpath, $default)
在给定的$xml
字符串中搜索与给定$xpath
匹配的第一个节点,并返回其字符串值。如果未找到节点,则返回$default
值。
XmlFu\firstNode($xml, $xpath)
对于给定$xml
字符串中与给定$xpath
匹配的第一个节点,返回一个SimpleXMLElement
实例。
XmlFu\chunks($xml, $xpath)
在传递的$xml
字符串中找到所有与给定$xpath
匹配的节点,并返回它们的asXML()
序列化数组 -- 字符串。
XmlFu\attrValues($xml, $elementXpath, $attrName)
在传递的$xml
字符串中找到所有与给定$elementXpath
匹配的元素,并返回它们的$attrName
属性值数组 -- 每个元素一个字符串值。
核心(不解析)
核心函数有一些接受$rootElement
(即SimpleXMLElement
实例)的*Impl
版本,而不是接受$xml
字符串。
XmlFu\valueImpl($rootElement, $xpath, $default)
XmlFu\firstNodeImpl($rootElement, $xpath)
XmlFu\chunksImpl($rootElement, $xpath)
XmlFu\attrValuesImpl($rootElement, $elementXpath, $attrName)
这样可以在查询多个值时避免不必要的多次解析。
处理默认命名空间
SimpleXMLElement::xpath()
在与默认XML命名空间声明处理时有一些问题:即xmlns="..."
属性。一旦存在,包含有xmlns
声明的元素及其声明元素本身在XPath查询中必须带有命名空间前缀。XmlFu方便地将默认命名空间别名为下划线 -- _
因此,
$xml = <<<XML
<OTA_PingRS xmlns="http://www.opentravel.org/OTA/2003/05">
<Success />
<EchoData>Hey!</EchoData>
</OTA_PingRS>
XML;
echo XmlFu\value($xml, '//_:EchoData', null); // 'Hey!'
附加功能
XmlFu\removeXmlProcessingInstruction($xml)
从传递的$xml
字符串中移除<?xml ...
声明。移除是以安全方式进行的:不使用正则表达式,诚实地解析。
XmlFu\rootTagName($xml)
传递的$xml
字符串中最顶层的XML元素的名称。
开发状态
在生产中使用。