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文件。 首先,我们需要理解JDOM的基本结构。JDOM通过Document对象表示整个XML文档,Element代表XML元素,Attribute表示元素属性,Text表示元素内的文本内容。这些类构成了...
使用JDOM,我们可以通过API操作这些节点来实现对XML的解析和操作。 要读取XML文件,首先需要在项目中引入JDOM库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.jdom ...
Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...
**Java与XML:JDOM解析XML的详细指南** 在Java编程中,XML(eXtensible Markup Language)是一种被广泛使用的数据交换格式,用于存储结构化数据。为了处理XML文档,开发者可以使用多种库,其中之一就是JDOM。JDOM是...
JDOM是Java中一个专门用来解析XML的库,它提供了方便的API来读取、修改和创建XML文档。在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三...
**JDOM解析XML文件** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java中,JDOM(Java Document Object Model)是一个流行的选择来解析和操作...
1. **JDOM**:JDOM是Java针对DOM规范实现的一个轻量级库,它提供了更直观、更高效的API来处理XML文档。JDOM允许开发者直接使用Java对象模型来创建、修改和读取XML。例如,使用JDOM创建XML文档的代码可能如下: ```...
本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本概念。JDOM提供了一组Java对象来表示XML文档,包括Element(元素)、Attribute(属性)、Text(文本...
通过JDOM,开发者可以使用Java API来处理XML文档,无需了解底层的SAX或DOM解析器的工作原理。 **JDOM的基本元素** - **Document**: XML文档的根节点,代表整个XML文档。 - **Element**: 表示XML文档中的元素,它是...
在Java中,有许多库可以帮助我们解析XML,其中JDOM是其中一个流行的库,专注于提供高效的XML处理功能。 **JDOM简介** JDOM(Java Document Object Model)是一个用纯Java编写的API,它提供了构建、读取和修改XML...
### jdom解析XML文件及将字符串解析为XML #### 一、JDOM简介与环境搭建 JDOM(Java Document Object Model)是一种用Java语言编写的轻量级API,用于处理XML文档。它允许开发者轻松地读取、创建、修改XML文档,并将...
2. xerces.jar:提供了Xerces-J,一个实现了XML规范的解析器,包括DOM和SAX解析器。 3. ant.jar:Apache Ant的库,这是一个Java构建工具,常用于编译、测试和打包项目,但在这里可能是依赖于其他库的一部分。 4. ...
Java中的JDOM库是用于解析XML文档的一种强大的工具。它提供了简单、高效的API来读取、修改和创建XML文件。本篇文章将深入探讨如何利用JDOM解析XML文件,以及在这个过程中涉及的关键知识点。 首先,我们需要了解XML...
在Java中,有多种库可以用来解析XML,其中之一便是JDOM。JDOM是一个专为Java设计的XML处理库,它提供了一种高效且方便的方式来读取、修改和生成XML文档。 ### JDOM解析XML的基本概念 1. **DOM(Document Object ...
JDOM是Java领域中一个专门用来解析XML的库,它提供了一种高效且易于使用的API来处理XML文档。在这个小实例中,我们将深入探讨如何使用JDOM解析XML文件。 首先,我们需要引入JDOM的依赖。在Java项目中,如果你使用的...
下面我们将详细探讨JDOM解析本地XML的相关知识点。 首先,JDOM的核心概念包括`Element`、`Attribute`和`Document`。`Element`代表XML文档中的元素节点,`Attribute`则是元素的属性,而`Document`则封装了整个XML...
JDOM是Java中专门用来解析和操作XML的一个库,它提供了一种高效且方便的方式来处理XML文档。本实例将深入讲解如何使用JDOM进行XML解析。 首先,我们需要在项目中引入JDOM的类库。JDOM官方网站提供了不同版本的JDOM ...