ikr/xml-fu

查询XML的便捷实用函数。最初编写是为了简化处理SOAP响应。

v1.1.0 2014-08-19 10:15 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:46:42 UTC


README

Build Status

关于

查询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元素的名称。

开发状态

在生产中使用。