Java解析xml i18n

时间:2014-02-26 05:25:23

标签: java xml internationalization

我正在为我的网络应用做i18n,我在xml文件中有一个错误消息列表,如下所示:

<ErrorList>
  <Errors culture="en">

    <Error id="InvalidBooking">
        <Heading1>We are unable to find your booking.</Heading1>
        <Heading2></Heading2>
        <Description1>Please try again.</Description1>
        <Description2>OR</Description2>
        <Description3>Seek assistance at the Check-In counter.</Description3>
        <Description4></Description4>
    </Error> 
 </Errors>

  <Errors culture="zh">

        <Error id="InvalidBooking">
        <Heading1>我们无法找到您的预订。</Heading1>
        <Heading2></Heading2>
        <Description1>请再试一次。.</Description1>
        <Description2>或</Description2>
        <Description3>请联系登机柜台寻求帮助。</Description3>
        <Description4></Description4>
        </Error>

  </Errors>

</ErrorList>

我使用DOM xml解析器加载错误消息。然后我通过匹配错误ID:

来获得特定错误
DocumentBuilder builder = DocumentBuilderFactory.newInstance().
                newDocumentBuilder();
        Document doc = builder.parse(xml);

        doc.getDocumentElement().normalize();

        NodeList nList = doc.getElementsByTagName("Error");

        for (int temp = 0; temp < nList.getLength(); temp++) {

            Node nNode = nList.item(temp);

            if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                Element eElement = (Element) nNode;

                Error _error = new Error();

                _error.setKey(eElement.getAttribute("id"));
                _error.setHeading1(eElement.getElementsByTagName("Heading1").item(0).getTextContent());
                _error.setHeading2(eElement.getElementsByTagName("Heading2").item(0).getTextContent());
                _error.setDescription1(eElement.getElementsByTagName("Description1").item(0).getTextContent());
                _error.setDescription2(eElement.getElementsByTagName("Description2").item(0).getTextContent());
                _error.setDescription3(eElement.getElementsByTagName("Description3").item(0).getTextContent());
      _error.setDescription5(eElement.getElementsByTagName("Description4").item(0).getTextContent());

                getErrors().add(_error);

如何指定文化ID以仅加载该部分中的错误消息?例如,当我切换到中文时,它会查找Errors culture =“zh”并仅在该部分进行解析? 感谢。

1 个答案:

答案 0 :(得分:0)

在for循环中,您应该能够获取nNode的属性并进行检查。

if ("zh".equals(nNode.getAttribute("culture"))) {
          // do it here...
}