【发布时间】:2016-12-20 11:51:00
【问题描述】:
我有一个项目,我试图获取一个 docx 文件,然后将其解压缩,然后使用 xpath 运行 document.xml 文件以查找所有表格元素。然后在每个表格元素中运行并使用 tblCaption(显然是表格标题)属性识别特定表格,然后遍历表格并找到表格单元格。然后我将通过使用字符串替换更改 w:fill 值来更改单元格的背景颜色。我们这样做是因为我们想手动将表格输入 Word,然后更改表格,而不必使用 PHPDocx 等库或其他库动态生成表格。到目前为止,我已经使用 SimpleXML 和 xpath 来查找文档中的所有表,遍历它们并测试 tblCaption 节点的存在和值。如果匹配,我将使用单元格文本为每个单元格分配 bg 颜色以标识单元格节点。我可以使用 xpath 找到所有表。我尝试使用 $tblNode->children() 和 $xpath:
来查找每个表的子节点 $xml = simplexml_load_file(APPPATH.TEMPLATE_UPLOAD_PATH.'xmltest/word/document.xml');
$namespaces = $xml->getDocNamespaces(true);
foreach ($namespaces as $prefix => $ns) {
$prefix = $prefix == '' ? 'default' : $prefix;
$xml->registerXPathNamespace($prefix, $ns);
}
$nodes = $xml->xpath("/w:document/w:body//w:tbl");
foreach($nodes as $node) {
$children = $node->xpath("/w:tblCaption");
echo count($children) . '<br />';
//$children = $node->children();
//echo count($children) . '<br />';
}
我最终想使用: $children = $node->xpath("/w:tblCaption[@val='whatever']");仅当 tblCaption 节点存在且具有特定值时才返回它。
目前,每个返回的 tbl 节点都有零个子节点。
有什么想法吗?
【问题讨论】: