我认为您的问题是“我是否在此 webMethod 中解析 XML 文件?”与 web 服务没有太大关系,但与软件设计和架构有关。遵循“单一职责”原则,您应该在另一个类中处理 XML。
关于 xml 文件的阅读,这里有很多问题很好的答案,例如Java - read xml file。
顺便问一下:你有没有想过使用数据库?在添加新翻译时,它比 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>
然后你可以在你的网络服务中调用数据源来翻译请求的单词:
@Override
public String translate(String word, String originalLanguage, String targetLanguage) {
XmlDataSource dataSource = new XmlDataSource();
return dataSource.getTranslation(word);
}