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

Get second row xml using first rows text value java

    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();
        }
    }

我想创建一个函数来获取设置元素中 xml 的第二部分。我想要函数 return 结果,以便我可以在 swing GUI 启动时将它分配给文本字段默认值。该函数应该采用 'isDecaptcher' 变量名和 return '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>

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

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.

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();
    }
}

这有效,但如果您有更可靠的答案可以分享。