[英]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.