0

我正在从远程服务器提取客户端信息并在我的网站上创建一个 xml 文件,该文件将被解析为网页。使用此代码:

$xml=simplexml_load_file("test.xml");
    print_r($xml);

输出以下内容:

SimpleXMLElement Object ( [@attributes] => Array ( [requestType] => schema ) ) 

这是 xml 文件,因此也许有人可以查看输出中是否有错误或其他内容:

    <b1Reply:response requestType="schema">
    <b1Reply:uri>/query/AccountBalance.aspx?CustCardCodeFrom=C1007&CustCardCodeTo=C1007</b1Reply:uri>
    <b1Reply:status>OK</b1Reply:status>
    <b1Reply:payload schemaDigest="ECDF0140846BF818A8A0605CB609BB7E">
    <querydata queryName="/query//AccountBalance.aspx?CustCardCodeFrom=C1007&CustCardCodeTo=C1007">
    <columns>
    <column name="ID" alias="ID" type="Int64" key="false"/>
    <column name="CompanyName" alias="CompanyName" type="String" key="false"/>
    <column name="CompanyAddr" alias="CompanyAddr" type="String" key="false"/>
    <column name="Phone" alias="Phone" type="String" key="false"/>
    <column name="Fax" alias="Fax" type="String" key="false"/>
    <column name="CompanyCurrency" alias="CompanyCurrency" type="String" key="false"/>
    <column name="_CustStatmentHdr_CardCode" alias="CardCode" type="String" key="false"/>
    <column name="_CustStatmentHdr_CardName" alias="CardName" type="String" key="false"/>  <column name="_CustStatmentHdr_CardType" alias="CardType" type="String" key="false"/>
<column name="_CustStatmentHdr_Balance" alias="Balance" type="Decimal" key="false"/>
<column name="_CustStatmentHdr_BalanceFC" alias="BalanceFC" type="Decimal" key="false"/>
<column name="_CustStatmentHdr_BalanceSys" alias="BalanceSys" type="Decimal" key="false"/>
<column name="_CustStatmentHdr_Currency" alias="Currency" type="String" key="false"/>
<column name="_CustStatmentHdr_PymntGroup" alias="PymntGroup" type="String" key="false"/>
<column name="_CustStatmentHdr_GroupName" alias="GroupName" type="String" key="false"/>
<column name="_CustStatmentHdr_SlpName" alias="SlpName" type="String" key="false"/>
<column name="_CustStatmentDtl_TransId" alias="TransId" type="Int32" key="false"/>
<column name="_CustStatmentDtl_TransType" alias="TransType" type="Int32" key="false"/>
<column name="_CustStatmentDtl_DtlCardCode" alias="DtlCardCode" type="String" key="false"/>
<column name="_CustStatmentDtl_RefDate" alias="RefDate" type="DateTime" key="false"/>
<column name="_CustStatmentDtl_TaxDate" alias="TaxDate" type="DateTime" key="false"/>
<column name="_CustStatmentDtl_DueDate" alias="DueDate" type="DateTime" key="false"/>
<column name="_CustStatmentDtl_Ref1" alias="Ref1" type="String" key="false"/>
<column name="_CustStatmentDtl_Amount" alias="Amount" type="Decimal" key="false"/>
<column name="_CustStatmentDtl_SYSCred" alias="SYSCred" type="Decimal" key="false"/>
<column name="_CustStatmentDtl_SYSDeb" alias="SYSDeb" type="Decimal" key="false"/>
<column name="_CustStatmentDtl_SourceLine" alias="SourceLine" type="Int16" key="false"/>
<column name="_CustStatmentDtl_Document_ID" alias="Document ID" type="String" key="false"/>
<column name="_CustStatmentDtl_Customer_PO_No." alias="Customer PO No." type="String" key="false"/>
<column name="_CustStatmentDtl_Source_Document_ID" alias="Source Document ID" type="Int32" key="false"/>
<column name="_CustStatmentDtl_TranType" alias="TranType" type="String" key="false"/>
<column name="_CustStatmentDtl_DocAmount" alias="DocAmount" type="Decimal" key="false"/>
<column name="_CustStatmentDtl_JournalLine" alias="JournalLine" type="Int16" key="false"/>
</columns>
<data>
<row id="1">
<ID>2</ID>
<CompanyName/>
<CompanyAddr>address</CompanyAddr>
<Phone>555-555-5555</Phone>
<Fax>555-555-5555</Fax>
<CompanyCurrency>$</CompanyCurrency>
<_CustStatmentHdr_CardCode>C1007</_CustStatmentHdr_CardCode>
<_CustStatmentHdr_CardName>Card Name</_CustStatmentHdr_CardName>
<_CustStatmentHdr_CardType>C</_CustStatmentHdr_CardType>
<_CustStatmentHdr_Balance>168069.405000</_CustStatmentHdr_Balance>
<_CustStatmentHdr_BalanceFC>0.000000</_CustStatmentHdr_BalanceFC>
<_CustStatmentHdr_BalanceSys>168069.405000</_CustStatmentHdr_BalanceSys>
<_CustStatmentHdr_Currency>$</_CustStatmentHdr_Currency>
<_CustStatmentHdr_PymntGroup>NET 7 DAYS</_CustStatmentHdr_PymntGroup>
<_CustStatmentHdr_GroupName>Food Distribution</_CustStatmentHdr_GroupName>
<_CustStatmentHdr_SlpName>John Doe</_CustStatmentHdr_SlpName>
<_CustStatmentDtl_TransId>5036</_CustStatmentDtl_TransId>
<_CustStatmentDtl_TransType>13</_CustStatmentDtl_TransType>
<_CustStatmentDtl_DtlCardCode>C1007</_CustStatmentDtl_DtlCardCode>
<_CustStatmentDtl_RefDate>7/5/2013 12:00:00 AM</_CustStatmentDtl_RefDate>
<_CustStatmentDtl_TaxDate>7/5/2013 12:00:00 AM</_CustStatmentDtl_TaxDate>
<_CustStatmentDtl_DueDate>7/12/2013 12:00:00 AM</_CustStatmentDtl_DueDate>
<_CustStatmentDtl_Ref1>106346</_CustStatmentDtl_Ref1>
<_CustStatmentDtl_Amount>27709.610000</_CustStatmentDtl_Amount>
<_CustStatmentDtl_SYSCred>0.000000</_CustStatmentDtl_SYSCred>
<_CustStatmentDtl_SYSDeb>27709.610000</_CustStatmentDtl_SYSDeb>
<_CustStatmentDtl_SourceLine>1</_CustStatmentDtl_SourceLine>
<_CustStatmentDtl_Document_ID>106346</_CustStatmentDtl_Document_ID>
<_CustStatmentDtl_Customer_PO_No.>469</_CustStatmentDtl_Customer_PO_No.>
<_CustStatmentDtl_Source_Document_ID>1347</_CustStatmentDtl_Source_Document_ID>
<_CustStatmentDtl_TranType>Invoice</_CustStatmentDtl_TranType>
<_CustStatmentDtl_DocAmount>27709.610000</_CustStatmentDtl_DocAmount>
<_CustStatmentDtl_JournalLine>0</_CustStatmentDtl_JournalLine>
</row>
</data>
</querydata>
</b1Reply:payload>
<b1Reply:error/>
</b1Reply:response>

如果我尝试回显单个属性,它会返回空白。我很茫然,而且是 simplexml 的菜鸟。任何帮助表示赞赏。

4

1 回答 1

0

首先,您的 XML 无效,请参阅http://www.xmlvalidation.com

要选择节点的属性,请使用xpath,这里是来自特定节点的特定属性:

$xml = simplexml_load_string($x); // assume XML in $x
$result = (string)$xml->xpath("//column[@name = '_CustStatmentHdr_Currency']/@alias")[0];
echo $result;

输出:

Currency

评论:

(1) 代码将 PHP >= 5.4 用于第[0]2 行
(2) 转换为 (string) 中的数组解引用,否则会Simplexml-Object返回

要获取具有所有属性的所有列节点,请执行以下操作:

$results = $xml->xpath("//column");
foreach ($results as $result) {
    foreach ($result->attributes() as $name, $value)
        echo "$name: $value, ";
    echo PHP_EOL;
}      

看到它工作:https ://eval.in/40273

于 2013-08-02T07:40:45.473 回答