如何用PHP解析命名空间的XML?

时间:2015-11-17 11:16:22

标签: php xml excel parsing namespaces

我的XML结构看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s63" ss:Name="Hyperlink">
   <Font ss:Color="#0563C1" ss:Underline="Single"/>
  </Style>
  <Style ss:ID="s27">
   <Font x:Family="Swiss" ss:Color="#0000FF" ss:Bold="1"/>
  </Style>
 </Styles>
 <Worksheet ss:Name="Sheet1">
  <ss:Table>
   <ss:Row>
    <ss:Cell ss:StyleID="s27">
     <ss:Data ss:Type="String">123</ss:Data>
    </ss:Cell>

我想要做的是遍历每个ss:Row元素并收集ss:Cell的属性以及ss:Data的值。

如果我尝试将此XML字符串加载到SimpleXMLElement类中,如下所示:$objects = new SimpleXMLElement($xmlString);,var dumping它会跳过整个ss:Table节点。

我也试过用DOMDocument解析它,但也没有运气。实现这个目标的正确方法是什么?

编辑:

我确实试过像这样的xpath解决方案:

foreach($objects->xpath('//ss:Row') as $row) {
            var_dump(count($row->xpath("//ss:Cell")));
            die();
        }

只是为了看看它是否实际上是在当前ss下选择节点:行父节点,但事实证明它是在整个文档中选择所有ss:Cell节点。

0 个答案:

没有答案