Я получаю XML-блок через POST. Я хотел бы разобрать конкретный AttributeValue
, где AttributeId
равен urn:Cisco:uc:1.0:callingnumber
.выберите узлы XML по атрибуту родительского узла
Вот данные я получаю через POST:
<?xml version="1.0" encoding="UTF-8"?>
<Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os">
<Subject SubjectCategory="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:role-id"
DataType="http://www.w3.org/2001/XMLSchema#string" Issuer="requestor">
<AttributeValue>CISCO:UC:UCMPolicy</AttributeValue>
</Attribute>
<Attribute AttributeId="urn:Cisco:uc:1.0:callingnumber" DataType="http://www.w3.org/2001/XMLSchema#string">
<AttributeValue>89996203741</AttributeValue>
</Attribute>
<Attribute AttributeId="urn:Cisco:uc:1.0:callednumber"
DataType="http://www.w3.org/2001/XMLSchema#string">
<AttributeValue>95551231234</AttributeValue>
</Attribute>
<Attribute AttributeId="urn:Cisco:uc:1.0:transformedcgpn"
DataType="http://www.w3.org/2001/XMLSchema#string">
<AttributeValue>89996203741</AttributeValue>
</Attribute>
<Attribute AttributeId="urn:Cisco:uc:1.0:transformedcdpn"
DataType="http://www.w3.org/2001/XMLSchema#string">
<AttributeValue>95551231234</AttributeValue>
</Attribute>
</Subject>
<Resource>
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
DataType="http://www.w3.org/2001/XMLSchema#anyURI">
<AttributeValue>CISCO:UC:VoiceOrVideoCall</AttributeValue>
</Attribute>
</Resource>
<Action>
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
DataType="http://www.w3.org/2001/XMLSchema#anyURI">
<AttributeValue>any</AttributeValue>
</Attribute>
</Action>
<Environment>
<Attribute AttributeId="urn:Cisco:uc:1.0:triggerpointtype"
DataType="http://www.w3.org/2001/XMLSchema#string">
<AttributeValue>translationpattern</AttributeValue>
</Attribute>
</Environment>
</Request>
И то, что я пытался до сих пор:
<?php
$datarequest = trim(file_get_contents('php://input'));
$xmlrequest = simplexml_load_string($datarequest);
$root=$xmlrequest->Subject;
foreach($root->Attribute as $child)
{
echo $child->AttributeValue . "<br>";
}
?>
Это вернет мне все AttributeValue
результаты в Subject
разделе результата , Как добавить условные критерии в мой цикл foreach, чтобы он возвращал результаты только там, где AttributeId="urn:Cisco:uc:1.0:callingnumber
?
Я закончил с использованием своего подхода с помощью DOM Я думаю, вопрос в том, что является преимущество/недостаток использования DOM против пути @bernie построил его с помощью "simplexml_load_string? – rsaturns
Я думаю, что DOM проще в использовании, чем simplexml - он более гибкий, документация лучше, и вы можете использовать 'print_r ($ node)', чтобы легко просматривать содержимое узла. –