私が抱えている問題に(直接的または間接的に)関連していると思われるいくつかの質問をここで読みましたが、これまでのところ私の特定のニーズに満足できるものはなかったので、状況を説明して、私たちは一緒に答えを思いつくことができます。
SimpleXML関数を使用して解析し、適切な出力を作成したいXMLカテゴリ(具体的にはAIML)のデータベースがあります。この解析された出力は、選択されたカテゴリ内のタグから処理されます。簡単なカテゴリの例は次のようになります。
<category>
<pattern>HOW ARE YOU</pattern>
<template>I am fine, how are you?</template>
</category>
上に示した<template>タグは、上に示したようにテキストを保持することも、単独で、またはテキストを散在させて、任意の数の異なるAIMLタグの1つ以上を保持することもできます。可能性は事実上無限です。より複雑な例を次に示します。
<category>
<pattern>NESTED RANDOM TEST</pattern>
<template>
<random>
<li>
<random>
<li>Choice #1-1</li>
<li>Choice #1-2</li>
<li>Choice #1-3</li>
</random>
</li>
<li>
This is some example text, along with another RANDOM tag:
<random>
<li>Choice #2-1</li>
<li>Choice #2-2</li>
<li>Choice #2-3</li>
</random>
</li>
<li>
<random>
<li>Choice #3-1</li>
<li>Choice #3-2</li>
<li>Choice #3-3</li>
</random>
This is some text that appears [i]after[/i] a RANDOM tag.
</li>
</random>
</template>
</category>
テンプレートタグにテキストのみが含まれている場合、または他のAIMLタグのみが含まれている場合は、コンテンツの解析に問題はありませんが、テキストとタグの組み合わせがある場合は、2番目と3番目の外側の<li>セクションのようになります。上記の例では、最初にテキストがある場合はタグを失い、前にタグがある場合はテキストを失います。この問題は、タグ内のテキストがどれほど「深い」または「浅い」場合でも発生します。したがって、ここで少し問題があります。
すでに述べたように、私はこの性質のいくつかの質問を読みましたが、これまでのところ満足のいく答えは見つかりませんでした。ただし、これは、関連する概念の一部を完全に理解していないため、一部のソリューションを適切に実装していない可能性があるためと思われます。たとえば、この投稿では、xsltを使用してxmlを「前処理」することに言及しており、それで問題が解決するようですが、それを実装する方法についてはまったくわかりません。さらに、私はxStreamを使用していないので、これが実装できるものかどうかさえわかりません。私はPHPの正式なトレーニングを受けたことがないので、私の経験は少しむらがあります。:)
あまりにも「言葉遣い」をせずに、自分の状況を明確にするのに十分な情報を提供できたと思います。