我在这里阅读了几个似乎与我遇到的问题相关(直接或间接)的问题,但到目前为止没有一个问题能满足我的具体需求,所以我想我会解释一下我的情况,看看是否我们可以一起想出一个答案。
我有一个 XML 类别数据库(特别是 AIML),我想使用 simpleXML 函数来解析它,以提供合适的输出。此解析后的输出是从所选类别中的标签处理的。一个简单的示例类别如下所示:
<category>
<pattern>HOW ARE YOU</pattern>
<template>I am fine, how are you?</template>
</category>
上面显示的 <template> 标记可以包含文本(如上所示),也可以包含任意数量的不同 AIML 标记中的一个或多个,可以单独保存,也可以散布在文本中。可能性几乎是无穷无尽的。这是一个更复杂的例子:
<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 标签,我解析它的内容没有问题,但如果它有文本和标签的组合,如第二和第三个外部 <li> 部分上面的例子,我要么丢失标签,如果有文本,或者文本,如果有一个标签在它之前。无论标签内的文本有多“深”或“浅”,都会出现此问题。因此,我在这里有点问题。
正如我已经提到的,我已经阅读了几个这种性质的问题,但到目前为止我还没有找到满意的答案。但是,我怀疑这可能是因为我没有完全理解所涉及的一些概念,因此可能没有正确实施某些解决方案。例如,这篇文章提到了使用 xslt 对 xml 进行“预处理”,这似乎可以解决我的问题,但我完全不知道如何实现它。另外,我没有使用 xStream,所以我什至不知道这是否可以实现。恐怕我从未接受过正式的 PHP 培训,所以我的经验有点参差不齐。:)
我希望我已经提供了足够的信息来清楚我的情况,而不会太“罗嗦”。