使用第一行文本值java获取第二行xml

时间:2019-03-06 07:34:24

标签: java xml parsing textfield populate

    public void loadSettings() {

        try {
            File inputFile = new File("data.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(inputFile);
            doc.getDocumentElement().normalize();
            NodeList nList = doc.getElementsByTagName("Setting");
            for (int temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nList.item(temp);
                    NodeList  VariableName = eElement.getElementsByTagName("VariableName");
                    NodeList  VariableValue = eElement.getElementsByTagName("VariableValue");
                    System.out.println(VariableName.item(0).getTextContent());
                    if (VariableName.item(0).hasChildNodes()) {

                    }
//                    txtBookmarkUrl.setText(bookMarkUrl);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我想创建一个在settings元素中获取xml第二部分的函数。我希望该函数返回结果,以便在swing GUI启动时可以将其分配给文本字段默认值。该函数应该使用'isDecaptcher'变量名称,并返回'0'VariableValue。

<Bookmark>
  <Setting>
    <VariableName>isDeathbycaptcha</VariableName>
    <VariableValue>0</VariableValue>
  </Setting>
  <Setting>
    <VariableName>isDecaptcher</VariableName>
    <VariableValue>0</VariableValue>
  </Setting>
  <Setting>
    <VariableName>isExpertdecoders</VariableName>
    <VariableValue>0</VariableValue>
  </Setting>
  <Setting>
    <VariableName>ManualCaptcha</VariableName>
    <VariableValue>1</VariableValue>
  </Setting>
</Bookmark>

2 个答案:

答案 0 :(得分:1)

public void loadSettings(String variableName) {

    try {
        File inputFile = new File("data.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(inputFile);
        doc.getDocumentElement().normalize();
        NodeList nList = doc.getElementsByTagName("Setting");
        for (int temp = 0; temp < nList.getLength(); temp++) {
            Node nNode = nList.item(temp);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nList.item(temp);
                NodeList VariableName = eElement.getElementsByTagName("VariableName");
                NodeList VariableValue = eElement.getElementsByTagName("VariableValue");
                if (VariableName.item(0).getTextContent().equalsIgnoreCase(variableName)) {

                    String txtBookmarkUrlValue = VariableValue.item(0).getLastChild().getTextContent();
                    System.out.println(txtBookmarkUrlValue);
                    txtBookmarkUrl.setText(txtBookmarkUrlValue);
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这行得通,但是,如果您有更可靠的答案,则可以共享。

答案 1 :(得分:0)

首先创建一个将代表您的设置的对象。情况是在整个应用程序中重用其值。我假设您一开始只能使用一次,并且设置不会更改。单例模式将适合那里。

final class Settings{

    private static volatile Settings instance = null;

    private boolean _isDeathByCaptcha;
    private boolean _manualCaptcha;

    ...
    //getters & setters
    public boolean isDeathByCaptcha(){
         return _isDeathByCaptcha;
    }

    public void setIsDeathByCaptcha(boolean isDeathByCaptcha){
         this._isDeathByCaptcha = isDeathByCaptcha;
    }

    private Settings(){}

    public static Settings getInstance(){
        if(instance == null){
            synchronized (Settings.class) {
                if (instance == null) {
                    instance = new Settings();
                }
            }
        }
        return instance;        
    }
}

此后,您可以致电Settings.getInstance().isDeathByCaptcha();以获取价值。当然,您需要更早地使用setter进行设置。