Php 当存在';混合内容
我在这里读过几个问题,这些问题似乎与我所面临的问题有关(直接或间接),但到目前为止,没有一个问题能满足我的具体需求,因此我想我会解释一下我的情况,看看我们是否能一起找到答案 我有一个XML类别的数据库(特别是AIML),我想使用simpleXML函数来解析它,以获得合适的输出。此解析输出是从所选类别内的标记处理的。一个简单的示例类别如下所示:Php 当存在';混合内容,php,simplexml,Php,Simplexml,我在这里读过几个问题,这些问题似乎与我所面临的问题有关(直接或间接),但到目前为止,没有一个问题能满足我的具体需求,因此我想我会解释一下我的情况,看看我们是否能一起找到答案 我有一个XML类别的数据库(特别是AIML),我想使用simpleXML函数来解析它,以获得合适的输出。此解析输出是从所选类别内的标记处理的。一个简单的示例类别如下所示: <category> <pattern>HOW ARE YOU</pattern> <templ
<category>
<pattern>HOW ARE YOU</pattern>
<template>I am fine, how are you?</template>
</category>
你好吗
我很好,你好吗?
如上所示,上面显示的标记可以保存文本,也可以单独保存一个或多个任意数量的不同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>
嵌套随机试验
选择#1-1
选择#1-2
选择#1-3
这是一些示例文本,以及另一个随机标记:
选择#2-1
选择#2-2
选择#2-3
选择#3-1
选择#3-2
选择#3-3
这是在一个随机标记之后出现的一些文本。
如果模板标记只包含文本,或者如果它只包含其他AIML标记,我在解析它的内容方面没有问题,但是如果它包含文本和标记的组合,就像上面示例的第二和第三个外部我希望我已经提供了足够的信息,可以清楚地了解我的情况,而不会过于“罗嗦”。虽然这可能不是解决我问题的最佳方法,但我已经找到了一种相当简单(至少对我来说)优雅的方法,通过使用preg_replace()来处理我的问题将任何纯文本实例包含在标记中的XML字符串中。以下是我的想法:
//首先,一些简单的混合内容XML:
$myTemplate='您好。很高兴认识你;
$myTemplate=preg_replace('~>(.*)$1虽然提出的答案确实很聪明,但我发现自己完全放弃了SimpleXML,而是使用PHP的内置功能。它支持将裸体文本内容公开为自己的离散节点的类和方法。正确的解决方案可能是递归的。然而,“实际上是无止境的”可能会产生几乎无穷无尽的解决方案。通过解析上述XML,您到底想得到什么作为输出?@nickb我试图实现的代码是一个名为Program O的聊天机器人引擎,它使用AIML类别数据库根据用户的输入生成响应。模板标记是从da返回的tabase,用于在找到“最佳匹配”后进行分析。模板标记可以包含文本,也可以包含十几个或更多不同的其他标记中的任何一个,这些标记指示解析器如何处理输出。有关所使用的各种标记的列表,请参阅。{continued}一般来说,模板将使用标签和纯文本的混合,没有特定的顺序。所需的最终输出将是XHTML,输出到web浏览器。创建递归解决方案的想法并不困扰我。我也很怀疑。:)这将是一个很好的回复,而不是一个答案