С такой 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>
Я хочу проверить наличие и считать количество рисунков
Я пробовал это:
$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')
.
Что не так с моим выражением?