我的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节点。