0

我从用户输入中提取了两个字符串。我需要将其中一个与行 ID 匹配。

我不知道是否需要将字符串解析为整数(甚至可能将我所有的 XML 数据解析为字符串,然后查找该数据),或者我是否可以使用字符串直接查找 XML 数据?也许两者都不是。

这是我在 XML 文件中存储的内容的示例:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <language>
        <row id="7101">
            <language-from>English</language-from>
            <language-to>Thai</language-to>
            <cost>30.00</cost>
            <comment><![CDATA[out source]]></comment>
        </row>
    </language>
</data>
4

2 回答 2

1

查看 XML 文档,我建议您将 XML 文档解析为一组结构化对象,将它们存储在地图中以便于查找,其中关键是来自用户输入的搜索条件。除非 XML 文件经常更改,否则一次性解析文档比任何基于字符串的搜索都值得。

我将定义一个类来保存该信息,如下所示:

class TranslationCost
{
    private int id;
    private String sourceLang;
    private String targetLang;
    private float cost;
    private String comment;
}

Map<Integer, TranslationCost> idTocostMap;

public float calculateCost(int id, int countOfWords)
{
    TranslationCost costObj = idToCostMap.get(id);
    if (null == costObj) {
        // throw exception
    }
    return costObj.getCost() * countOfWords;
}

类似的东西...

于 2012-08-23T02:57:24.840 回答
1

您可以使用xPath查询来查找节点...

Document xmlDoc = // Load the XML into an DOM document
Node root = xmlDoc.getDocumentElement();

XPathFactory xFactory = XPathFactory.newInstance();
XPath xPath = getXPathFactory().newXPath();
XPathExpression xExpress = getXPath().compile("/data/language/row[language-from='English']");
NodeList nodeList = (NodeList)xExpress.evaluate(root, XPathConstants.NODESET);

我个人会围绕这个概念构建一个更简单的模型,以便更容易调用,但概念是相同的

于 2012-08-23T03:08:50.647 回答