VoiceXml简称Vxml通过它可以实现,网页文字发出语音并且可以接收客户端键盘输入操作来进行交互,也可以实现电信服务那种电话自动语音服务。关于Vxml说明文档请见附件!
用VXML实现像中国移动10086那样的自动语音服务,可以通过写出VXML规范的XML文件来实现,在这里只介绍一下怎么写出可以交互的VXML文件,和怎样用软件来测试它的效果。测试可以用这个免费软件但是它只能读英文和阿拉伯数字,无法读出中文。软件名称:prophecy-8.0.252.0-small-tts-ds.msi在google刻意搜到。下面这个文件是xml格式的jsp文件。这个文件的访问地址可以配置在prophecy软件里,作为语音程序的入口。具体操作可参照prophecy软件附带说明书。这个文件在运行的时候会自动被解析成XML文件并用软件自动读出内容,实现交互。可以写多个嵌套的文件来实现一层一层的交互。需要注意的是这里的动态数据的代码只能内嵌java代码,EL表达式是无法被解析的。例如:
<%
TDictionaryMaintenance parentDic = (TDictionaryMaintenance)request.getAttribute("parentDic");
TDictionaryMaintenance objectDic = (TDictionaryMaintenance)request.getAttribute("objectDic");
List dicList = (List)request.getAttribute("childrenDics");
%>
<prompt>
<% out.print("Please press 1 to find sites of the "+objectDic.getName()+"."); %>
<c:if test="<%=dicList!=null%>">
<%
for(int i=0;i<dicList.size();i++)
{
TDictionaryMaintenance dic = (TDictionaryMaintenance)dicList.get(i);
String str = "Please press "+(i+2);
str += " to find "+dic.getName()+".";
out.print(str);
}
%>
</c:if>
<% out.print("Please press 0 to return parent menu."); %>
</prompt>
<%@page contentType="application/voicexml+xml; charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<?xml version="1.0"?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
<form>
<field name="input" type="number">
<property name="bargein" value="false"/>
<prompt>
I will write content.<!--要读出的内容。-->
</prompt>
<!--filled为根据输入的操作来执行方法-->
<filled>
<!--当按1时,执行如下操作。-->
<if cond="input == 1">
<!--服务请求地址,如下: &等同于以往web下的&符号。-->
<goto next="<c:url value='/html/voicexml/article.ao?method=searchArticle&code=zcfg'/>"/>
<elseif cond="input == 2"/>
<goto next="<c:url value='/html/voicexml/site.ao?method=searchSite&code=zcfg'/>"/>
<else/>
input error,please input again.
</if>
</filled>
</field>
</form>
</vxml>
可以通过jdom对Vxml进行读写操作:
package vxml;
import java.io.IOException;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
public class VxmlReader {
private static VxmlReader instance = null;
private static final String VXML_FLIE_NAME = "VoiceXml.xml";
private Element vxmlElt;
private VxmlReader() {
SAXBuilder sb = new SAXBuilder();
try {
Document doc = sb.build(Thread.currentThread().getContextClassLoader().getResourceAsStream(VXML_FLIE_NAME));
this.vxmlElt = doc.getRootElement();
List<Element> list = this.vxmlElt.getChildren();
for(Element l : list) {
System.out.println(l.getValue());
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static VxmlReader getInstance() {
if(null == instance) {
instance = new VxmlReader();
}
return instance;
}
public static void main(String[] args) {
VxmlReader.getInstance();
}
}
package vxml;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class VxmlWriter {
public static void main(String[] args) {
DateFormat dateParser = new SimpleDateFormat("yyyyMMddhhmmss");
Element vxmlElt = new Element("vxml");
vxmlElt.setAttribute("version", "2.1");
Element formElt = new Element("form");
Element blockElt = new Element("block");
Element promptElt = new Element("prompt");
promptElt.addContent("Things are working correctly! Congratulations.");
blockElt.addContent(promptElt);
formElt.addContent(blockElt);
vxmlElt.addContent(formElt);
Document doc = new Document(vxmlElt);
Format format = Format.getCompactFormat();
format.setEncoding("utf-8");
format.setIndent(" ");//设置缩进
XMLOutputter out = new XMLOutputter(format);
String str = out.outputString(doc);
System.out.println(str);
try {
out.output(doc, new FileOutputStream("c:/VoiceXml" + dateParser.format(new Date()) + ".xml"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
需要jdom.jar
分享到:
相关推荐
jdom解析xml
NULL 博文链接:https://xurichusheng.iteye.com/blog/1518547
jdom解析xml文件小实例jdom解析xml文件小实例jdom解析xml文件小实例
这是我做的简单的一个在jsp中用jdom解析xml的程序。只是显示,添加等简单的功能,来学习学习jdom解析xml的程序。如果你想学习那这一定是个很好的例子
一个关于用jdom解析xml,遍历xml,建立xml的简单例子.
Jdom操作、创建和解析XML Jdom操作、创建和解析XML Jdom操作、创建和解析XML
jdom解析xml文件的源代码、jar包以及示例xml文件
NULL 博文链接:https://zhaohong.iteye.com/blog/426761
利用JDOM解析xml文件,并根据xml中为类名,生成相应的对象。
jdom解析XML文件and把字符串解析成XML.txt jdom解析XML文件and把字符串解析成XML.txtjdom解析XML文件and把字符串解析成XML.txt
xml文件生成工具类(含jdom.jar)
这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写...
基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发...
jdom.jar xml解析
一个简单的 JDOM解析本地XML 例子
xml数据前后台解析;提供了两种方式:dom4j与jdom对xml文件、xml字符串的读与写操作;同时实现在前台用jquery解析xml,将数据展示在页面上,程序可以跑
jdom解析XML(修改为比较通用的方法) jdom解析XML(修改为比较通用的方法) jdom解析XML(修改为比较通用的方法)