我有一个搜索,但我看不到这个答案,也许有人可以指出我正确的方向。
我正在访问一个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;)但没有运气。
有人有任何建议吗?
感谢。
答案 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)')
);
会将第一个匹配的节点强制转换为字符串并返回它。如果没有匹配的节点,它将返回一个空字符串。