0

我无法使用 DOMDocument PHP 在 WSDL (XML) 文档上找到某个节点。当我使用 getElementsByTagName 时,它​​总是返回 NULL。我要找到的是 xsd:complexType 但是当我尝试不同的节点时,比如说类型,它会返回一个对象。

这是我的 WSDL (XML) 文档

<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:routeDx2" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:routeDx2">
<types>
<xsd:schema targetNamespace="urn:routeDx2"
>
 <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
 <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
 <xsd:complexType name="inputCashin">
  <xsd:all>
   <xsd:element name="userName" type="xsd:string"/>
   <xsd:element name="signature" type="xsd:string"/>
   <xsd:element name="productCode" type="xsd:string"/>
   <xsd:element name="merchantCode" type="xsd:string"/>
   <xsd:element name="terminal" type="xsd:string"/>
   <xsd:element name="merchantNumber" type="xsd:string"/>
   <xsd:element name="transactionType" type="xsd:string"/>
   <xsd:element name="recipientNumber" type="xsd:string"/>
   <xsd:element name="recipientName" type="xsd:string"/>
   <xsd:element name="amount" type="xsd:string"/>
   <xsd:element name="feeAmount" type="xsd:string"/>
   <xsd:element name="traxId" type="xsd:string"/>
   <xsd:element name="timeStamp" type="xsd:string"/>
  </xsd:all>
 </xsd:complexType>
 <xsd:complexType name="inputCashout">
  <xsd:all>
   <xsd:element name="userName" type="xsd:string"/>
   <xsd:element name="signature" type="xsd:string"/>
   <xsd:element name="productCode" type="xsd:string"/>
   <xsd:element name="merchantCode" type="xsd:string"/>
   <xsd:element name="terminal" type="xsd:string"/>
   <xsd:element name="merchantNumber" type="xsd:string"/>
   <xsd:element name="transactionType" type="xsd:string"/>
   <xsd:element name="recipientNumber" type="xsd:string"/>
   <xsd:element name="recipientName" type="xsd:string"/>
   <xsd:element name="amount" type="xsd:string"/>
   <xsd:element name="feeAmount" type="xsd:string"/>
   <xsd:element name="verifyingCode" type="xsd:string"/>
   <xsd:element name="traxId" type="xsd:string"/>
   <xsd:element name="timeStamp" type="xsd:string"/>
  </xsd:all>
 </xsd:complexType>
</xsd:schema>
</types>
<definitions>

我将要找到的是 xsd:complexType 或者如果可能的话,如何通过具有唯一值的属性名称(verifyingCode 或其他)查​​找,我如何通过 PHP 和 DOMDocument 完成此操作?

4

1 回答 1

0

除了<definitions>(最后一行)不正确的结束标签外,我没有看到问题。

$doc = new DOMDocument();
$doc->loadXML($xml);
$complexTypes = $doc->getElementsByTagName('complexType');
printf('<p>Found %d complexType elements</p>', $complexTypes->length);
foreach ($complexTypes as $complexType) {
    echo $complexType->getAttribute('name'), '<br>';
}

演示 - http://codepad.viper-7.com/95XDsS

您可能xsd在标签名称查询中包含命名空间。如果您阅读文档,您将看到getElementsByTagName()指定的参数

要匹配的标记的本地名称(无命名空间)

于 2012-11-28T05:06:29.507 回答