【问题标题】:How to parse xml in php (SOAP response format)? [duplicate]如何解析 php 中的 xml(SOAP 响应格式)? [复制]
【发布时间】:2018-02-26 12:07:18
【问题描述】:

如何将下面的 xml 解析为 html?

我尝试了一些东西,但它并不总是适合我!

这是我的代码:

$xml2 = '<soap:envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:body><insttraderesponse xmlns="http://tsetmc.com/"><insttraderesult><xs:schema id="TradeSelectedDate" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"><xs:element name="TradeSelectedDate" msdata:isdataset="true" msdata:usecurrentlocale="true"><xs:complextype><xs:choice minoccurs="0" maxoccurs="unbounded"><xs:element name="TradeSelectedDate"><xs:complextype><xs:sequence><xs:element name="InsCode" type="xs:long" minoccurs="0"><xs:element name="DEven" type="xs:int" minoccurs="0"><xs:element name="HEven" type="xs:int" minoccurs="0"><xs:element name="PClosing" type="xs:decimal" minoccurs="0"><xs:element name="IClose" type="xs:unsignedByte" minoccurs="0"><xs:element name="YClose" type="xs:unsignedByte" minoccurs="0"><xs:element name="PDrCotVal" type="xs:decimal" minoccurs="0"><xs:element name="ZTotTran" type="xs:decimal" minoccurs="0"><xs:element name="QTotTran5J" type="xs:decimal" minoccurs="0"><xs:element name="QTotCap" type="xs:decimal" minoccurs="0"><xs:element name="PriceChange" type="xs:decimal" minoccurs="0"><xs:element name="PriceMin" type="xs:decimal" minoccurs="0"><xs:element name="PriceMax" type="xs:decimal" minoccurs="0"><xs:element name="PriceYesterday" type="xs:decimal" minoccurs="0"></xs:element></xs:element></xs:element></xs:element></xs:element></xs:element></xs:element></xs:element></xs:element></xs:element></xs:element></xs:element></xs:element></xs:element></xs:sequence></xs:complextype></xs:element></xs:choice></xs:complextype></xs:element></xs:schema><diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><tradeselecteddate xmlns=""><tradeselecteddate diffgr:id="TradeSelectedDate1" msdata:roworder="0"><inscode>70270965300262393</inscode><deven>20171007</deven><heven>122506</heven><pclosing>1149.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1120.00</pdrcotval><ztottran>30</ztottran><qtottran5j>110107</qtottran5j><qtotcap>123589100.00</qtotcap><pricechange>-31.00</pricechange><pricemin>1119.00</pricemin><pricemax>1151.00</pricemax><priceyesterday>1151.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate2" msdata:roworder="1"><inscode>70270965300262393</inscode><deven>20171008</deven><heven>115823</heven><pclosing>1138.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1096.00</pdrcotval><ztottran>68</ztottran><qtottran5j>406755</qtottran5j><qtotcap>450144550.00</qtotcap><pricechange>-53.00</pricechange><pricemin>1096.00</pricemin><pricemax>1140.00</pricemax><priceyesterday>1149.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate3" msdata:roworder="2"><inscode>70270965300262393</inscode><deven>20171009</deven><heven>122944</heven><pclosing>1138.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1130.00</pdrcotval><ztottran>26</ztottran><qtottran5j>40162</qtottran5j><qtotcap>45074488.00</qtotcap><pricechange>-8.00</pricechange><pricemin>1111.00</pricemin><pricemax>1136.00</pricemax><priceyesterday>1138.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate4" msdata:roworder="3"><inscode>70270965300262393</inscode><deven>20171010</deven><heven>122853</heven><pclosing>1135.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1099.00</pdrcotval><ztottran>41</ztottran><qtottran5j>142754</qtottran5j><qtotcap>158049769.00</qtotcap><pricechange>-39.00</pricechange><pricemin>1099.00</pricemin><pricemax>1138.00</pricemax><priceyesterday>1138.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate5" msdata:roworder="4"><inscode>70270965300262393</inscode><deven>20171011</deven><heven>123747</heven><pclosing>1134.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1149.00</pdrcotval><ztottran>70</ztottran><qtottran5j>274386</qtottran5j><qtotcap>309699317.00</qtotcap><pricechange>14.00</pricechange><pricemin>1085.00</pricemin><pricemax>1160.00</pricemax><priceyesterday>1135.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate6" msdata:roworder="5"><inscode>70270965300262393</inscode><deven>20171014</deven><heven>122804</heven><pclosing>1134.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1136.00</pdrcotval><ztottran>20</ztottran><qtottran5j>132078</qtottran5j><qtotcap>150068268.00</qtotcap><pricechange>2.00</pricechange><pricemin>1134.00</pricemin><pricemax>1147.00</pricemax><priceyesterday>1134.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate7" msdata:roworder="6"><inscode>70270965300262393</inscode><deven>20171015</deven><heven>122858</heven><pclosing>1136.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1164.00</pdrcotval><ztottran>30</ztottran><qtottran5j>163795</qtottran5j><qtotcap>189048927.00</qtotcap><pricechange>30.00</pricechange><pricemin>1138.00</pricemin><pricemax>1164.00</pricemax><priceyesterday>1134.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate8" msdata:roworder="7"><inscode>70270965300262393</inscode><deven>20171016</deven><heven>122610</heven><pclosing>1175.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1192.00</pdrcotval><ztottran>145</ztottran><qtottran5j>1370542</qtottran5j><qtotcap>1619653296.00</qtotcap><pricechange>56.00</pricechange><pricemin>1140.00</pricemin><pricemax>1192.00</pricemax><priceyesterday>1136.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate9" msdata:roworder="8"><inscode>70270965300262393</inscode><deven>20171017</deven><heven>122038</heven><pclosing>1177.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1175.00</pdrcotval><ztottran>35</ztottran><qtottran5j>530700</qtottran5j><qtotcap>626571778.00</qtotcap><pricechange>0.00</pricechange><pricemin>1175.00</pricemin><pricemax>1189.00</pricemax><priceyesterday>1175.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate10" msdata:roworder="9"><inscode>70270965300262393</inscode><deven>20171018</deven><heven>122948</heven><pclosing>1177.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1154.00</pdrcotval><ztottran>30</ztottran><qtottran5j>122213</qtottran5j><qtotcap>143987917.00</qtotcap><pricechange>-23.00</pricechange><pricemin>1154.00</pricemin><pricemax>1190.00</pricemax><priceyesterday>1177.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate11" msdata:roworder="10"><inscode>70270965300262393</inscode><deven>20171021</deven><heven>122944</heven><pclosing>1175.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1130.00</pdrcotval><ztottran>43</ztottran><qtottran5j>146005</qtottran5j><qtotcap>168988615.00</qtotcap><pricechange>-47.00</pricechange><pricemin>1130.00</pricemin><pricemax>1190.00</pricemax><priceyesterday>1177.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate12" msdata:roworder="11"><inscode>70270965300262393</inscode><deven>20171022</deven><heven>122945</heven><pclosing>1175.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1152.00</pdrcotval><ztottran>13</ztottran><qtottran5j>23368</qtottran5j><qtotcap>27075280.00</qtotcap><pricechange>-23.00</pricechange><pricemin>1152.00</pricemin><pricemax>1175.00</pricemax><priceyesterday>1175.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate13" msdata:roworder="12"><inscode>70270965300262393</inscode><deven>20171023</deven><heven>115455</heven><pclosing>1173.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1159.00</pdrcotval><ztottran>31</ztottran><qtottran5j>189632</qtottran5j><qtotcap>219538910.00</qtotcap><pricechange>-16.00</pricechange><pricemin>1151.00</pricemin><pricemax>1169.00</pricemax><priceyesterday>1175.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate14" msdata:roworder="13"><inscode>70270965300262393</inscode><deven>20171024</deven><heven>111715</heven><pclosing>1173.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1140.00</pdrcotval><ztottran>13</ztottran><qtottran5j>18633</qtottran5j><qtotcap>21484920.00</qtotcap><pricechange>-33.00</pricechange><pricemin>1140.00</pricemin><pricemax>1168.00</pricemax><priceyesterday>1173.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate15" msdata:roworder="14"><inscode>70270965300262393</inscode><deven>20171025</deven><heven>121800</heven><pclosing>1173.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1140.00</pdrcotval><ztottran>14</ztottran><qtottran5j>23800</qtottran5j><qtotcap>27349000.00</qtotcap><pricechange>-33.00</pricechange><pricemin>1140.00</pricemin><pricemax>1165.00</pricemax><priceyesterday>1173.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate16" msdata:roworder="15"><inscode>70270965300262393</inscode><deven>20171028</deven><heven>122757</heven><pclosing>1171.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1135.00</pdrcotval><ztottran>24</ztottran><qtottran5j>103809</qtottran5j><qtotcap>118768169.00</qtotcap><pricechange>-38.00</pricechange><pricemin>1135.00</pricemin><pricemax>1169.00</pricemax><priceyesterday>1173.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate17" msdata:roworder="16"><inscode>70270965300262393</inscode><deven>20171029</deven><heven>122602</heven><pclosing>1167.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1125.00</pdrcotval><ztottran>38</ztottran><qtottran5j>162553</qtottran5j><qtotcap>183428695.00</qtotcap><pricechange>-46.00</pricechange><pricemin>1118.00</pricemin><pricemax>1153.00</pricemax><priceyesterday>1171.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate18" msdata:roworder="17"><inscode>70270965300262393</inscode><deven>20171030</deven><heven>121330</heven><pclosing>1165.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1123.00</pdrcotval><ztottran>35</ztottran><qtottran5j>79652</qtottran5j><qtotcap>90083831.00</qtotcap><pricechange>-44.00</pricechange><pricemin>1119.00</pricemin><pricemax>1164.00</pricemax><priceyesterday>1167.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate19" msdata:roworder="18"><inscode>70270965300262393</inscode><deven>20171031</deven><heven>122959</heven><pclosing>1170.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1167.00</pdrcotval><ztottran>115</ztottran><qtottran5j>453829</qtottran5j><qtotcap>536095339.00</qtotcap><pricechange>2.00</pricechange><pricemin>1149.00</pricemin><pricemax>1201.00</pricemax><priceyesterday>1165.00</priceyesterday></tradeselecteddate><tradeselecteddate diffgr:id="TradeSelectedDate20" msdata:roworder="19"><inscode>70270965300262393</inscode><deven>20171101</deven><heven>120105</heven><pclosing>1169.00</pclosing><iclose>0</iclose><yclose>3</yclose><pdrcotval>1151.00</pdrcotval><ztottran>36</ztottran><qtottran5j>188638</qtottran5j><qtotcap>219513448.00</qtotcap><pricechange>-19.00</pricechange><pricemin>1147.00</pricemin><pricemax>1190.00</pricemax><priceyesterday>1170.00</priceyesterday></tradeselecteddate></tradeselecteddate></diffgr:diffgram></insttraderesult></insttraderesponse></soap:body></soap:envelope>';

        foreach($xml2->tradeselecteddate->tradeselecteddate as $item)
        {
            echo "<p>Item Code: " . $item->inscode . "</p>";
            echo "<p>Item Date: " . $item->deven . "</p>";
            echo "<p>Item Price: " . $item->pricemin . "</p>";
        }

【问题讨论】:

  • 您不需要自己解析 SOAP XML,因为 XML 只是 SOAP 系统中的一个传输层,您可以通过 SOAP 客户端更轻松地访问数据。
  • 我使用 CURL 而不是 SOAP 客户端,现在我不得不使用这种方式(如果句子有误,请原谅我的英语)
  • @ArmanFeyzi,尝试使用 $soap = new SoapClient("http://your.endpoint.com/route"); 而不是 CURL。
  • @ishegg 我说我不能使用 SoapClient,因为当我使用 SoapClient webservice 时没有返回数据,但是当我使用 CURL 并传递 xml body 和 header webservice 工作正常时,现在我应该使用这个方式,我试图将此 XML 解析为 html

标签: php xml soap xml-parsing


【解决方案1】:

就像@dormilich 所说,如果你想从一个SOAP API 获取数据,你应该使用PHP SoapClient。您不需要进行任何 XML 解析。

如果由于某种原因需要进行 XML 解析,请使用 Xpath

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 2023-03-08
    • 2012-08-02
    • 2016-07-04
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多