3

各応答に異なるタイプのトランザクションが 0 個以上ある SOAP サーバーから応答を受け取ります。

各トランザクション タイプは、ベース トランザクション タイプの拡張です。

異なる取引タイプは異なる方法で処理されます。

PHP で、応答する各トランザクションのトランザクション タイプを取得する方法はありますか (それ以外は、各複雑なタイプ内の要素の違いを把握しようとします)。

たくさんの種類があり、それぞれの種類にはたくさんの要素があります....

これを取得できるクラスはありますか?

以下は単なるイラストです...

<transactions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:type1">
  <id>24111</id><something>00000000</something><name>Blah</name>
</transactions>
<transactions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:type8">
  <id>24111</id><somethingelse>011</somethingelse>
</transactions>
4

2 に答える 2

2

この回答があなたの質問に正確に当てはまるかどうかはよくわかりません。次のコード スニペットは、名前空間の値自体の型ではなく、指定された名前空間によって type 属性値を取得します。

PHP 独自の Document Object Model で完了。

<?php
$str = <<<XML
    <content>
        <transactions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:type1">
            <id>24111</id>
            <something>00000000</something>
            <name>Blah</name>
        </transactions>
        <transactions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:type8">
            <id>24111</id>
            <somethingelse>011</somethingelse>
        </transactions>
    </content>
XML;

$doc = new DomDocument();
$doc->loadXML($str);

$nodeList = $doc->getElementsByTagName('transactions');
foreach ($nodeList as $element) {
    $value = $element->getAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'type');
    echo $value . "\n";
}

これにより、指定された 2 つのタイプ「ns2:type1」と「ns2:type8」が出力されます。

于 2013-10-05T20:01:17.747 に答える
1

で要素を解析できますsimple_html_dom

これがそのリンクです。

例はここにあります:

<?php
include "simple_html_dom.php";
$html_nb = '
<transactions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:type1"><id>24111</id><something>00000000</something><name>Blah</name>
</transactions>
<transactions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:type8"><id>24111</id><somethingelse>011</somethingelse>
</transactions>';
function chtml($str){
    if(strpos("<html>", $str) !== false)
        return '<html><whole_code>'.$str.'</whole_code></html>';
    else
        return "<whole_code>".$str."</whole_code>";
}
function find_element_type($str){
    if(preg_match_all("/\<(.*?)\>/i", $str, $matches))
        return $matches[1][0];
    else
        return false;
}
function get_xsi_type($str){
    if(preg_match_all("/xsi\:type\=\"(.*?)\"/i", $str, $matches))
        return $matches[1][0];
    else
        return false;
}

$html = new simple_html_dom();
$html_2 = new simple_html_dom();
$html->load(chtml($html_nb));
$max_type = 10;

$element = $html->find('whole_code');
$e = $element[0]->innertext;
$html_2->load(chtml($e));
$k = 0;
while($html_2->find("whole_code",false)->children($k) != "")
{
   $all = $html_2->find("whole_code",false)->children($k);
   echo get_xsi_type($all) . "<br>";
   echo find_element_type($all) . " : " .$all."<br>";
   $k++;
}
echo "<hr>";

結果 :

ns2:type1
transactions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:type1" : 2411100000000Blah 
ns2:type8
transactions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:type8" : 24111011 
于 2013-10-02T11:44:50.057 に答える