Получить вторую строку xml, используя текстовые значения первых строк - PullRequest
0 голосов
/ 06 марта 2019
    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 в элементах настроек.Я хочу, чтобы функция возвращала результат, чтобы я мог присвоить ему значение по умолчанию в текстовом поле при запуске графического интерфейса пользователя Swing.Функция должна принять, скажем, имя переменной «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 ]

1 голос
/ 06 марта 2019
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();
    }
}

Это работает, но если у вас есть более надежные ответы, вы можете поделиться.

0 голосов
/ 06 марта 2019

Прежде всего создайте Объект, который будет представлять ваши настройки.Дело в том, чтобы повторно использовать его значения во всем приложении.Я предполагаю, что вы будете использовать его только один раз в начале, и настройки не изменятся.Синглтон шаблон будет соответствовать там.

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.

...