簡體   English   中英

如何在 Web 服務中讀取 XML 文件

[英]How to read XML file in Web service

我需要創建可以在兩種語言之間翻譯一些單詞的 WEB 服務,所以我創建了一個界面:

 @WebService
public interface Translator {
    @WebMethod
    String translate(String word, String originalLanguage, String targetLanguage);
}

和實現該接口的類:

@WebService(endpointInterface = "source.Translator")
public class TranslatorImpl implements Translator{

    @Override
    public String translate(String word, String originalLanguage, String targetLanguage) {


        return word + originalLanguage +" butterfly " + targetLanguage + " baboska ";
    }

}

但是因為我對此很陌生,所以我不知道如何設置這個 webMethod 來從一個 XML 文件中讀取,該文件應該是一個帶有單詞的數據庫。 現在我是怎么做的,當我測試它時,無論你寫什么,它都只會返回相同的單詞。 所以任何人都可以向我解釋如何從 XML 文件中讀取,所以如果我寫蝴蝶它會翻譯它,或者如果我寫花它會翻譯它。 我是否在此 webMethod 中解析 XML 文件?

我想你的問題“我是否在這個 webMethod 中解析 XML 文件?” 特別是與網絡服務沒有太大關系,但與軟件設計和架構有關。 遵循“單一職責”原則,您應該在另一個類中進行 XML 處理。

關於讀取 xml 文件,這里有很多問題都有很好的答案,例如Java 讀取 xml 文件

順便說一句:你有沒有想過使用數據庫? 在添加新翻譯時,它比 XML 文件更靈活,並且在處理可能會更改的數據時被視為最佳實踐(未來添加了許多新條目)。

編輯

一個快速而骯臟的例子,可以更好地理解我的建議。 請注意,數據結構不涵蓋各種語言的使用! 如果您需要,則必須更改示例。

首先,您需要類似 XmlDataSource 類的東西:

public class XmlDataSource {

    public String getTranslation(String original) throws Exception {
        Document d = readData();
        XPathFactory xPathfactory = XPathFactory.newInstance();
        XPath xpath = xPathfactory.newXPath();
        XPathExpression expr = xpath.compile("/dictionary/entry/translation[../original/text() = '" + original + "']");
        String translated = (String) expr.evaluate(d, XPathConstants.STRING);
        return translated;
    }

    private Document readData() throws Exception {
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        File datafile = new File("your/path/to/translations.xml");
        return documentBuilder.parse(new FileInputStream(datafile));
    }
}

示例中的 xpath 依賴於這樣的結構:

<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
    <entry>
        <original>butterfly</original>
        <translation>Schmetterling</translation>
    </entry>
    <entry>
        <original>flower</original>
        <translation>Blume</translation>
    </entry>
    <entry>
        <original>tree</original>
        <translation>Baum</translation>
    </entry>
</dictionary>

然后你可以調用 webservice 中的數據源來翻譯請求的單詞:

@Override
    public String translate(String word, String originalLanguage, String targetLanguage) {
        XmlDataSource dataSource = new XmlDataSource();
        return dataSource.getTranslation(word);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM