Я потратил немного времени на эту тему и нашел хороший способ получить VoiceXMLDocument из файла vxml без анализа документа.Ниже описан способ, с помощью которого я могу это сделать.
Первый шаг: импортировать следующие файлы jar: jvxml-jsapi1.0.jar - jvxml-xml.jar - jvxml.jar - log4j-1.2.13.jar,Я думаю, вы можете найти эти файлы JAR в Интернете.
Второй шаг: скачать файл vxml и прочитать его как InputStream
/**
* Download file from Internet
*
* @param fileUrl
* - file location from Internet
* @return InputStream - file input stream
* */
public static InputStream downloadFile(String fileUrl) {
InputStream input = null;
if (checkUrl(fileUrl)) {
try {
HttpUriRequest request = new HttpGet(fileUrl.toString());
DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
setProxy(defaultHttpClient);
HttpClient httpClient = defaultHttpClient;
HttpResponse response = httpClient.execute(request);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(entity);
input = buf.getContent();
return input;
} else {
throw new IOException(
"Download failed, HTTP response code " + statusCode
+ " - " + statusLine.getReasonPhrase());
}
} catch (Exception e) {
return input;
}
} else {
return input;
}
}
/**
* Check URL
*
* @param fileUrl
* - file location from Internet
* @return boolean - URL link is valid or invalid
* **/
private static boolean checkUrl(String fileUrl) {
URL u;
try {
u = new URL(fileUrl);// this would check for the protocol
u.toURI();// does the extra checking required for validation of URI
return true;
} catch (MalformedURLException e) {
return false;
} catch (URISyntaxException e) {
return false;
}
}
public static void setProxy(DefaultHttpClient httpclient) {
final String PROXY_IP = "10.10.10.10";
final int PROXY_PORT = 8080;
final String username = "";
final String password = "";
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(PROXY_IP, PROXY_PORT),
new UsernamePasswordCredentials(username, password));
HttpHost proxy = new HttpHost(PROXY_IP, PROXY_PORT);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
proxy);
}
Третий шаг: парсинг входного потока в VoiceXmlDocument
private static VoiceXmlDocument getVoiceXMLDocument(InputStream input) {
VoiceXmlDocument vdom = null;
try {
vdom = new VoiceXmlDocument(new InputSource(input));
} catch (ParserConfigurationException ex) {
Log.e("ParserConfigurationException = ", ex.getMessage());
} catch (SAXException ex) {
Log.e("SAXException = ", ex.getMessage());
} catch (IOException ex) {
Log.e("IOException = ", ex.getMessage());
}
return vdom;
}
Последний шаг: получите элемент из VoiceXMLDocument, как хотите
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button download = (Button)findViewById(R.id.button1);
download.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String fileUrl = "http://www.ampersand.com/vxml_tests/ex.vxml";
InputStream input = downloadFile(fileUrl);
Log.e("input = ", input.toString());
try {
VoiceXmlDocument voiceXmlDocument = getVoiceXMLDocument(input);
Log.e("prompt = ", voiceXmlDocument.getElementsByTagName("prompt").item(0).toString());
} catch (Exception e) {
return;
}
}
});
}
Таким образом, будет выводиться информация о теге подсказки из файла vxml.Вы можете увидеть это в Android Log.
Удачи!