Есть ли способ для разбора документа в VoiceXMLDocument?[Java - Android] - PullRequest
0 голосов
/ 27 октября 2011

Интересно, есть ли хороший способ разбора org.w3c.dom.Document на org.enhydra.wireless.voicexml.dom.VoiceXMLDocument?

Я использую Java в Android приложении.Мое приложение читает файл VoiceXML в InputStreamInputStream я могу получить документ, используя DocumentBuilderFactory.Но на этот раз я разбираюсь при разборе Document до VoiceXMLDocument.Ниже мой программный код.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btnLoadFile = (Button) findViewById(R.id.btnLoadFile);

    btnLoadFile.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            InputStream input = downloadFile(fileUrl);
            try {
                Document dom = getVXML(input);
                /**
                 * I'm stuff at here.
                 * Cannot parsing Document to VoiceXMLDocument.
                 * It will make an error
                 * */
                VoiceXMLDocument voiceXMLDocument = (VoiceXMLDocument) dom;
            } catch (Exception e) {
                Log.e("Exception = ", e.getMessage());
            }
        }
    });
}

/**
 * Convert InputStream to Document
 * @param inputStream (InputStream)
 * @return dom (Document)
 * */
public Document getVXML(InputStream inputStream)
        throws FileNotFoundException {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    Document dom = null;
    try {
        DocumentBuilder db = dbf.newDocumentBuilder();
        dom = db.parse(inputStream);
    } catch (ParserConfigurationException pce) {
        pce.printStackTrace();
    } catch (SAXException se) {
        se.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return dom;
}

1 Ответ

0 голосов
/ 31 октября 2011

Я потратил немного времени на эту тему и нашел хороший способ получить 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.

Удачи!

...