具有这样的XML结构:
<w:document>
<w:body>
<w:p>{textcontent}</w:p>
<w:p>
<w:drawing>
</w:drawing>
</w:p>
<w:p>{no textcontent}</w:p>
<w:p>
<w:drawing>
</w:drawing>
</w:p>
<w:p>{no textcontent}</w:p>
<w:p>text..</w:p>
<w:tbl>three</w:tbl>
<w:p>four</w:p>
</w:body>
</w:document>
我要检查图纸的出现并计数nr
我已经尝试过:
$document = new DOMDocument();
$document->loadXML($xml_str);
$xpath = new DOMXpath($document);
$xpath->registerNamespace(
'wspace', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'
);
$pindex = 0;
foreach ($xpath->evaluate('//wspace:p') as $index => $p_node)
{
if (strlen($p_node->textContent)>0) {
//I just want to know if drawing exists in this $p_node..
//if the the node contains any content
$child_nodes = $xpath->evaluate('//wspace:drawing', $p_node);
var_dump($child_nodes[0]);
$pindex++;
//But I get an object for each pnode. I just want an object when there
//is an actualy <w:drawing> inside of <p> (item with index 1,3 in above example)
}
}
如何检查<w:p><w:drawing>
的发生次数?
我可以这样计算发生的次数:
foreach ($xpath->evaluate('//wspace:p//wspace:drawing') as $index => $node)
{
var_dump($node);
}
但是我也需要p($pindex
)的索引。
我也一直在尝试evaluate('/child')
和evaluate('node()/child')
失败。
我的表情出了什么问题?
答案 0 :(得分:0)
严格从xpath角度来看:
添加
<root xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
[your xml above]
</root>
在您的xml之前和之后尝试
count(//w:p/w:drawing)
输出:
2.0
如果需要整数而不是float,请将表达式更改为
round(count(//w:p/w:drawing))
希望对其他人有帮助。
答案 1 :(得分:0)
我实际上找到了自己的问题的答案:-)
代替:
$child_nodes = $xpath->evaluate('//wspace:drawing', $p_node);
我只是在当前$ p_node上使用childNodes:
$child_nodes = $p_node->childNodes;
foreach($child_nodes as $rc)
{
if ($rc->localName == 'drawing')
{
$img_count++;
echo 'P=' . $pindex;
}
}