PHP Xpath:如何从 WSDL 上的任何方法获取操作 URL?
PHP Xpath: How to get the action URL from any method on a WSDL?
我正在尝试仅使用所需的操作(和 wsdl)从任意 WSDL 恢复操作 URL:
$method = "consultarProcesso";
$wsdl = "https://webserverseguro.tjrj.jus.br/MNI/Servico.svc?wsdl";
$xmlWSDL = new SimpleXMLElement(file_get_contents($wsdl));
$xpath = "//*[local-name()='operation'][@name='$method']";
$result = $xmlWSDL->xpath($xpath);
var_dump($result[0]);
问题是我不知道如何从 $result[0] 中获取节点值来恢复本例中的所需值:
http://www.cnj.jus.br/servico-intercomunicacao-2.2.2/consultarProcesso
我该怎么做才能实现这一目标?
您可以使用 SimpleElement::children
and SimpleElement::attributes
:
的命名空间参数检索此信息
// Retrieve the `wsdl:` namespaced children of the operation
[$input, $output] = $result[0]->children('wsdl', true);
// Retrieve the `wsaw:`-namespaced attributes of the input element,
// then grab the one named Action
$actionAttribute = $input->attributes('wsaw', true)->Action;
// Convert its value into a string
$actionUrl = (string)$actionAttribute;
(显然,出于此答案的目的,这是过度评论。)
有几种方法可以直接使用 xpath
找到感兴趣的 input
元素。您可以像现在这样使用 local-name()
:
$xpath = "//*[local-name()='operation'][@name='$method']/*[local-name()='input']";
或者直接在xpath
中指定命名空间:
$xpath = "//wsdl:operation[@name='$method']/wsdl:input";
获得所需元素后,您可以通过其命名空间属性查看 Action
:
$result = $xmlWSDL->xpath($xpath)[0];
$namespaces = $result->getNameSpaces();
foreach ($namespaces as $ns) {
if (isset($result->attributes($ns)['Action'])) $url = (string)$result->attributes($ns)['Action'];
}
echo $url;
输出:
http://www.cnj.jus.br/servico-intercomunicacao-2.2.2/consultarProcesso
我正在尝试仅使用所需的操作(和 wsdl)从任意 WSDL 恢复操作 URL:
$method = "consultarProcesso";
$wsdl = "https://webserverseguro.tjrj.jus.br/MNI/Servico.svc?wsdl";
$xmlWSDL = new SimpleXMLElement(file_get_contents($wsdl));
$xpath = "//*[local-name()='operation'][@name='$method']";
$result = $xmlWSDL->xpath($xpath);
var_dump($result[0]);
问题是我不知道如何从 $result[0] 中获取节点值来恢复本例中的所需值:
http://www.cnj.jus.br/servico-intercomunicacao-2.2.2/consultarProcesso
我该怎么做才能实现这一目标?
您可以使用 SimpleElement::children
and SimpleElement::attributes
:
// Retrieve the `wsdl:` namespaced children of the operation
[$input, $output] = $result[0]->children('wsdl', true);
// Retrieve the `wsaw:`-namespaced attributes of the input element,
// then grab the one named Action
$actionAttribute = $input->attributes('wsaw', true)->Action;
// Convert its value into a string
$actionUrl = (string)$actionAttribute;
(显然,出于此答案的目的,这是过度评论。)
有几种方法可以直接使用 xpath
找到感兴趣的 input
元素。您可以像现在这样使用 local-name()
:
$xpath = "//*[local-name()='operation'][@name='$method']/*[local-name()='input']";
或者直接在xpath
中指定命名空间:
$xpath = "//wsdl:operation[@name='$method']/wsdl:input";
获得所需元素后,您可以通过其命名空间属性查看 Action
:
$result = $xmlWSDL->xpath($xpath)[0];
$namespaces = $result->getNameSpaces();
foreach ($namespaces as $ns) {
if (isset($result->attributes($ns)['Action'])) $url = (string)$result->attributes($ns)['Action'];
}
echo $url;
输出:
http://www.cnj.jus.br/servico-intercomunicacao-2.2.2/consultarProcesso