誰にもアイデアはありますか?私はこれについて手がかりがありませんでした。
たとえば、ドキュメント要素/ルート要素の一部として、XML テキストを XML としてXML パーサーにロードします。次に、その要素のすべての子ノードを反復処理して、次のように決定します。
- 各要素ごとに、+1カウントします
- 各テキストごとに、+ そのテキスト内の単語をカウントします (テキストの単語をカウントする方法については、他の Q&A 資料を参照してください)。
反復が完了すると、単語数が得られます。
コード例:
<?php
/**
* Count Words on XML Text Using PHP
* @link https://stackoverflow.com/a/17670772/367456
*/
$xmlText = <<<BUFFER
The <tag1>quick brown fox</tag1> <tag2>jumps over</tag2>
the lazy <tag1>dog</tag1>
BUFFER;
$doc = new DOMDocument();
$result = $doc->loadXML(sprintf('<root>%s</root>', $xmlText));
if (!$result) {
throw new Exception('Invalid XML text given.');
}
/**
* replace this function with your own implementation that works
* for all your UTF-8 strings, this is just a quick example mock.
*/
function utf8_count_words($string) {
return (int)str_word_count($string);
}
$wordCount = 0;
foreach ($doc->documentElement->childNodes as $node) {
switch ($node->nodeType) {
case XML_ELEMENT_NODE:
$wordCount++;
break;
case XML_TEXT_NODE:
$wordCount += utf8_count_words($node->data);
break;
default:
throw new Exception(
sprintf('Unexpected nodeType in XML-text: %d', $node->nodeType)
);
}
}
printf("Result: %d words.\n", $wordCount);
出力例 ( Demo ):
Result: 6 words.