带有标记名称空格的Php XML查询

时间:2015-07-18 20:19:59

标签: php xml

我有一个搜索,但我看不到这个答案,也许有人可以指出我正确的方向。

我正在访问一个rest api并使用curl在php中返回XML。

我在使用名称中带有空格的值表单时遇到问题,这里是我回来的一些xml。

    <extension_attribute>
  <id>66</id>
  <name>ASSET - EMAIL</name>
  <type>String</type>
  <value>email@email.email</value>
</extension_attribute>

我可以使用以下内容获取值:

$xml->extension_attributes->extension_attribute[7]->value;

但遗憾的是,我不负责属性名称,由不同的团队创建,不会删除空格。

我确实尝试使用儿童进行搜索(&#34; ...&#34;)但没有运气。

有人有任何建议吗?

感谢。

1 个答案:

答案 0 :(得分:0)

字符串set @id=10; CREATE TABLE Exam_@id( name varchar(25) not null, roll int(11) not null ) 不是标记名称,而是文本节点的内容。你不能使用SimpleXMLs语法糖来解决它。

但是,使用Xpath表达式是可能的。

"ASSET - EMAIL"

输出:

$root = new SimpleXmlElement($xml);
foreach ($root->xpath('//extension_attribute[name = "ASSET - EMAIL"]') as $attribute) {
  var_dump((string)$attribute->value);
}

Xpath表达式选择任何string(17) "email@email.email" 元素节点...

extension_attribute

并过滤具有文本内容`//extension_attribute`

的子元素name的节点
ASSET - EMAIL

`//extension_attribute[name = "ASSET - EMAIL"]` 将始终返回SimpleXMLElement::xpath()个对象的数组。如果表达式没有匹配任何节点,则该数组将为空。

在DOM中,SimpleXMLElement也可以从Xpath表达式返回标量值:

DOMXpath::evaluate()

Xpath函数$document = new DOMDocument(); $document->loadXml($xml); $xpath = new DOMXpath($document); var_dump( $xpath->evaluate('string(//extension_attribute[name = "ASSET - EMAIL"]/value)') ); 会将第一个匹配的节点强制转换为字符串并返回它。如果没有匹配的节点,它将返回一个空字符串。