используя метод setAttribute со значением int - PullRequest
1 голос
/ 29 октября 2019

Я пытаюсь передать значение int в метод setAttribute, но получаю ошибку, в которой говорится, что

несовместимые типы int нельзя преобразовать в строку

Как мне решить эту проблему, не испортив мой код?

Я попытался разобрать строку в int

public class DAOxml implements DAOInterface {

    private Document doc;

    @Override
    public void addWatch(DTOwatch dtoWatch) {
        doc = getDOMDocument();
        Element root = doc.getDocumentElement();

        Element watch = doc.createElement("watch");
        watch.setAttribute("ID", dtoWatch.id);

        Element imageText = doc.createElement("imageText");
        imageText.setTextContent(dtoWatch.imageText);

        Element imageUrl = doc.createElement("imageUrl");
        imageUrl.setTextContent(dtoWatch.imageUrl);

        Element likes = doc.createElement("likes");
        likes.setTextContent(String.valueOf(dtoWatch.likes));

        Element dislikes = doc.createElement("dislikes");
        dislikes.setTextContent(String.valueOf(dtoWatch.dislikes));

        watch.appendChild(imageText);
        watch.appendChild(imageUrl);
        watch.appendChild(likes);
        watch.appendChild(dislikes);
        root.appendChild(watch);
        writeToXML(doc);
    }

    @Override
    public void deleteWatch(String ID) {
        doc = getDOMDocument();
        Element root = doc.getDocumentElement();
        NodeList nodeList = root.getElementsByTagName("watch");
        String sokID;

        for (int i = 0; i < nodeList.getLength(); i++) {
            Element watch = (Element) nodeList.item(i);
            if (watch.hasAttributes()) {
                sokID = watch.getAttribute("ID");
                if (sokID.equalsIgnoreCase(ID)) {
                    root.removeChild(watch);
                    break;
                }
            }
        }
        writeToXML(doc);
    }

    @Override
    public void updateWatch(DTOwatch dtoWatch) {
        doc = getDOMDocument();
        Element root = doc.getDocumentElement();
        NodeList nodeList = root.getElementsByTagName("mobil");
        String sokID;

        for (int i = 0; i < nodeList.getLength(); i++) {
            Element watch = (Element) nodeList.item(i);
            if (watch.hasAttributes()) {
                sokID = watch.getAttribute("ID");
                if (sokID.equalsIgnoreCase(dtoWatch.id)) {
                    watch.getElementsByTagName("imageText").item(0).setTextContent(dtoWatch.imageText);
                    watch.getElementsByTagName("imageUrl").item(0).setTextContent(dtoWatch.imageUrl);
                    watch.getElementsByTagName("likes").item(0).setTextContent(String.valueOf(dtoWatch.likes));
                    watch.getElementsByTagName("dislikes").item(0).setTextContent(String.valueOf(dtoWatch.dislikes));
                    break;

                }
            }
        }
        writeToXML(doc);
    }

    @Override
    public List<DTOwatch> getWatch() {
        List<DTOwatch> watch = new ArrayList<>();
        doc = getDOMDocument();
        Element root = doc.getDocumentElement();
        NodeList nodeList = root.getElementsByTagName("watch");
        System.out.println(nodeList.getLength());

        for (int i = 0; i < nodeList.getLength(); i++) {
            Element watch = (Element) nodeList.item(i);

            DTOwatch dtoWatch = new DTOwatch();
            if (watch.hasAttributes()) {
                String ID = watch.getAttribute("ID");
                dtoWatch.id = id;
            }

            dtoWatch.imageText = watch.getElementsByTagName("imageText").item(0).getTextContent();
            dtoWatch.imageUrl = watch.getElementsByTagName("imageUrl;").item(0).getTextContent();
            dtoWatch.likes = Integer.parseInt(watch.getElementsByTagName("likes").item(0).getTextContent());
            dtoWatch.dislikes = Integer.parseInt(watch.getElementsByTagName("dislikes").item(0).getTextContent());
            watch.add(dtoWatch);
        }
        return watch;
    }

    private Document getDOMDocument() {

        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

            DocumentBuilder db = dbf.newDocumentBuilder();

            doc = db.parse(new File("watch.xml"));
        } catch (SAXException ex) {
            Logger.getLogger(DAOxml.class.getName() + ex.getMessage());
        } catch (IOException | ParserConfigurationException ex) {
            Logger.getLogger(DAOxml.class.getName() + ex.getMessage());
        }

        return doc;
    }

    private void writeToXML(Document doc) {

        try {
            TransformerFactory transformerFactory = TransformerFactory.newInstance();

            Transformer transformer = transformerFactory.newTransformer();

            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

            DOMSource source = new DOMSource(doc);

            StreamResult result = new StreamResult(new File("watch.xml"));

            transformer.transform(source, result);

            StreamResult consoleResult = new StreamResult(System.out);
            transformer.transform(source, consoleResult);
        } catch (TransformerException ex) {
            Logger.getLogger(DAOxml.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Я ожидаю соединения с моим файлом XML и возможностичтобы добавить вещи к нему через мой графический интерфейс, который я делаю с javafx

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Согласно Javadoc метод setAttribute() принимает два параметра: имя атрибута и значение атрибута. Оба являются строковыми значениями. Теперь это не означает, что схема XML видит их как строку. Схема может определять ваш атрибут как логическое, целое или другое. Но установщик в Java всегда будет принимать строку.

Так что вам нужно сначала преобразовать значение int в строку, используя, например, String.valueOf(...).

        watch.setAttribute("ID", String.valueOf(dtoWatch.id));

Кроме того,Вы, вероятно, хотите использовать JAXB, а не манипулировать XML напрямую в Java. JAXB предоставит вам хорошую абстракцию структуры XML, и вы сможете легко конвертировать в / из XML / Java. Если вы сделаете это, то он даст вам метод set ... с правильным типом данных. Посмотрите этот урок , чтобы начать.

0 голосов
/ 29 октября 2019

Я не очень разбираюсь в XML, поэтому прошу прощения, если это не то, что вы спрашиваете, но вы можете попытаться проанализировать int в строку через

    String newString = Integer.toString(<int>);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...