我有一个类似于以下文本的XML文件:
dos2unix
我正在使用此Xpath来选择节点:
<?xml version="1.0" standalone="yes"?>
<Calendar xmlns="urn:AvmInterchangeSchema-Calendario-1.0">
<Date>
<Day>12/04/2017</Day>
<TypesDay>
<Type>Test 1</Type>
<Type>Test 2</Type>
<Type>Test 3</Type>
</TypesDay>
</Date>
</Calendar>
如果符合条件,我该如何处理“TypesDay”条目?
我希望不要创造重复......我会疯狂几个小时,这肯定是一件小事。
答案 0 :(得分:1)
有几种方法可以做到这一点。首先,您应该注册名称空间:
$xml->registerXPathNamespace('x', 'urn:AvmInterchangeSchema-Calendario-1.0');
我假设您的值为12/04/2017
的节点名称可能会发生变化。
<强>第一强>
在命名空间TypesDay
内找到一个名为x
的节点,父节点有一个值为12/04/2017
的子节点
$response = $xml->xpath('//*[*[text()="'.date("d/m/Y").'"]]/x:TypesDay');
<强>第二强>
在命名空间TypesDay
内找到一个名为x
的节点,该节点是具有值12/04/2017
$response = $xml->xpath('//*[text()="'.date("d/m/Y").'"]/following-sibling::x:TypesDay');
两者的结果是:
array(1) {
[0]=>
object(SimpleXMLElement)#2 (1) {
["Type"]=>
array(3) {
[0]=>
string(6) "Test 1"
[1]=>
string(6) "Test 2"
[2]=>
string(6) "Test 3"
}
}
}
毕竟,如果您只想要这些条目,只需添加下一个级别/x:Type
:
$response = $xml->xpath('//*[*[text()="'.date("d/m/Y").'"]]/x:TypesDay/x:Type');
或者:
$response = $xml->xpath('//*[text()="'.date("d/m/Y").'"]/following-sibling::x:TypesDay/x:Type');
结果:
array(3) {
[0]=>
object(SimpleXMLElement)#3 (1) {
[0]=>
string(6) "Test 1"
}
[1]=>
object(SimpleXMLElement)#4 (1) {
[0]=>
string(6) "Test 2"
}
[2]=>
object(SimpleXMLElement)#5 (1) {
[0]=>
string(6) "Test 3"
}
}