`
mengqingyu
  • 浏览: 333872 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Voice Xml规范的XML语音交互(含jdom解析)

阅读更多
       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">
		<!--服务请求地址,如下: &amp;等同于以往web下的&符号。-->
		<goto next="<c:url value='/html/voicexml/article.ao?method=searchArticle&amp;code=zcfg'/>"/>
	<elseif cond="input == 2"/>
		<goto next="<c:url value='/html/voicexml/site.ao?method=searchSite&amp;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
分享到:
评论
2 楼 mengqingyu 2011-02-22  
andilyliao 写道
孟庆禹??

李傲? 哈哈 竟然这里碰到你了。。
1 楼 andilyliao 2011-02-22  
孟庆禹??

相关推荐

    使用JDOM解析XML文件

    本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过Document对象表示整个XML文档,Element代表XML元素,Attribute表示元素属性,Text表示元素内的文本内容。这些类构成了...

    jdom 读取XML 文件

    使用JDOM,我们可以通过API操作这些节点来实现对XML的解析和操作。 要读取XML文件,首先需要在项目中引入JDOM库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom ...

    java jdom解析xml

    Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...

    用jdom解析xml

    **Java与XML:JDOM解析XML的详细指南** 在Java编程中,XML(eXtensible Markup Language)是一种被广泛使用的数据交换格式,用于存储结构化数据。为了处理XML文档,开发者可以使用多种库,其中之一就是JDOM。JDOM是...

    用jdom解析xml文件

    JDOM是Java中一个专门用来解析XML的库,它提供了方便的API来读取、修改和创建XML文档。在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三...

    jdom解析xml文件

    **JDOM解析XML文件** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java中,JDOM(Java Document Object Model)是一个流行的选择来解析和操作...

    xml数据前后台解析:jdom与dom4j源码,程序可以跑

    1. **JDOM**:JDOM是Java针对DOM规范实现的一个轻量级库,它提供了更直观、更高效的API来处理XML文档。JDOM允许开发者直接使用Java对象模型来创建、修改和读取XML。例如,使用JDOM创建XML文档的代码可能如下: ```...

    利用JDOM解析xml文件

    本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本概念。JDOM提供了一组Java对象来表示XML文档,包括Element(元素)、Attribute(属性)、Text(文本...

    Jdom解析XML

    通过JDOM,开发者可以使用Java API来处理XML文档,无需了解底层的SAX或DOM解析器的工作原理。 **JDOM的基本元素** - **Document**: XML文档的根节点,代表整个XML文档。 - **Element**: 表示XML文档中的元素,它是...

    jdom.jar xml解析

    在Java中,有许多库可以帮助我们解析XML,其中JDOM是其中一个流行的库,专注于提供高效的XML处理功能。 **JDOM简介** JDOM(Java Document Object Model)是一个用纯Java编写的API,它提供了构建、读取和修改XML...

    jdom解析XML文件and把字符串解析成XML

    ### jdom解析XML文件及将字符串解析为XML #### 一、JDOM简介与环境搭建 JDOM(Java Document Object Model)是一种用Java语言编写的轻量级API,用于处理XML文档。它允许开发者轻松地读取、创建、修改XML文档,并将...

    JDOM解析XML

    2. xerces.jar:提供了Xerces-J,一个实现了XML规范的解析器,包括DOM和SAX解析器。 3. ant.jar:Apache Ant的库,这是一个Java构建工具,常用于编译、测试和打包项目,但在这里可能是依赖于其他库的一部分。 4. ...

    java利用jdom解析xml文件

    Java中的JDOM库是用于解析XML文档的一种强大的工具。它提供了简单、高效的API来读取、修改和创建XML文件。本篇文章将深入探讨如何利用JDOM解析XML文件,以及在这个过程中涉及的关键知识点。 首先,我们需要了解XML...

    Jdom解析xml案例

    在Java中,有多种库可以用来解析XML,其中之一便是JDOM。JDOM是一个专为Java设计的XML处理库,它提供了一种高效且方便的方式来读取、修改和生成XML文档。 ### JDOM解析XML的基本概念 1. **DOM(Document Object ...

    jdom解析xml文件小实例

    JDOM是Java领域中一个专门用来解析XML的库,它提供了一种高效且易于使用的API来处理XML文档。在这个小实例中,我们将深入探讨如何使用JDOM解析XML文件。 首先,我们需要引入JDOM的依赖。在Java项目中,如果你使用的...

    JDOM解析本地XML

    下面我们将详细探讨JDOM解析本地XML的相关知识点。 首先,JDOM的核心概念包括`Element`、`Attribute`和`Document`。`Element`代表XML文档中的元素节点,`Attribute`则是元素的属性,而`Document`则封装了整个XML...

    JDOM解析xml文档实例(自己编写,仅供参考)

    JDOM是Java中专门用来解析和操作XML的一个库,它提供了一种高效且方便的方式来处理XML文档。本实例将深入讲解如何使用JDOM进行XML解析。 首先,我们需要在项目中引入JDOM的类库。JDOM官方网站提供了不同版本的JDOM ...

Global site tag (gtag.js) - Google Analytics