【问题标题】:Parsing complex XML in PHP5在 PHP5 中解析复杂的 XML
【发布时间】:2011-09-28 08:31:59
【问题描述】:

您好,这是我的第一篇文章。 我正在尝试使用 php 解析 xml,但我坚持使用它

我的 xml 示例:

<xml xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
     xmlns:rs='urn:schemas-microsoft-com:rowset'
     xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
   <s:ElementType name='row' content='eltOnly' rs:CommandTimeout='30'>
      <s:AttributeType name='ows_LinkTitle' rs:name='Phone Number*' rs:number='1'>
         <s:datatype dt:type='string' dt:maxLength='512' />
      </s:AttributeType>
      <s:AttributeType name='ows_GSM_x0020_PUK' rs:name='GSM PUK' rs:number='2'>
         <s:datatype dt:type='string' dt:maxLength='512' />
      </s:AttributeType>
   </s:ElementType>
</s:Schema>
<rs:data>
   <z:row ows_LinkTitle='628558621183' ows_GSM_x0020_PUK='41016732'/>
   <z:row ows_LinkTitle='628558621181' ows_GSM_x0020_PUK='21783670'/>
</rs:data>
</xml>

我正在尝试从每个 'z:row' 中获取值 非常感谢任何帮助。谢谢

我正在尝试这段代码,但它不起作用

$xml_all = simplexml_load_string($xmlnya);

echo '<ol>';
foreach ($xml_all->xml->rs->z as $zrow)
{
 echo '<li> ows_LinkTitle: '.$zrow['ows_LinkTitle'];
 echo '</li>';
}
echo '</ol>';

【问题讨论】:

  • 您的 XML 格式错误(缺少 s 命名空间声明,缺少 s:ElementType 结束标记。请在尝试“解析”它之前修复它。
  • 您可以尝试使用 simplexml。问题是您的 xml 字符串远非有效(没有“s”命名空间,“”未关闭)。
  • @naboen:如果/当您修复 XML 时,您是否希望在 PHP 中使用任何特定的库? DOM、SimpleXML、XMLReader 还是其他?

标签: php xml parsing


【解决方案1】:

下面的 sn-ps 假定(固定的)XML 文档是$xml 中的字符串。

SimpleXML

$xml  = simplexml_load_string($xml);
$rows = $xml->children('rs', TRUE)->data->children('z', TRUE)->row;
foreach ($rows as $row) {
    $attributes = $row->attributes();
    $link_title = (string) $attributes->ows_LinkTitle;
    $gsm_puk    = (string) $attributes->ows_GSM_x0020_PUK;
    var_dump($link_title, $gsm_puk);
}

阅读:SimpleXML usageSimpleXMLElement::children()SimpleXMLElement::attributes()

DOM

$doc = new DOMDocument;
$doc->loadXML($xml);
$rows = $doc->getElementsByTagNameNS('#RowsetSchema', 'row');
foreach ($rows as $row) {
    $link_title = $row->getAttribute('ows_LinkTitle');
    $gsm_puk    = $row->getAttribute('ows_GSM_x0020_PUK');
    var_dump($link_title, $gsm_puk);
}

阅读:DOMDocument::getElementsByTagNameNS()DOMElement::getAttribute()

【讨论】:

    【解决方案2】:

    修复 xml 后,您应该查看 simpleXML documentation,特别是 xpath method

    【讨论】:

    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多