Java добавить атрибут и значение в существующий XML - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно динамически обновить файл server.xml для Apache tomcat и добавить новый атрибут и значение. Этот документ XML содержит много элементов с атрибутами с одинаковыми именами.Например, несколько элементов соединителя с различными значениями атрибутов.

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
    port="${tomcat.http.port}" 
    connectionTimeout="${tomcat.connection.timeout}"
    maxHttpHeaderSize="20480"
    socket.soKeepAlive="true" 
/>

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
    port="${tomcat.basic.https.port}"
    socket.soKeepAlive="true"
    SSLEnabled="true"
    socket.appReadBufSize="17408"
    scheme="https"
    secure="true"
   />

Мне нужно добавить новый атрибут, где соединитель в элементе, где значение порта равно $ {tomcat.basic.https.port}.

Это то, что я до сих пор нашел для поиска правильного элемента.

    DocumentBuilderFactory docFactory = buildDocFact();
    DocumentBuilder docBuilder = null;
    Document doc = null;

    File file = new File(filePath);
    docBuilder = docFactory.newDocumentBuilder();
    doc = docBuilder.parse(file);
    doc.getDocumentElement().normalize();

    XPath xpath = XPathFactory.newInstance().newXPath();
    NodeList nodes =
                (NodeList) xpath.evaluate("//*[contains(@port, 
   '${tomcat.basic.https.port}')]", doc,
                        XPathConstants.NODESET);

        for (int idx = 0; idx < nodes.getLength(); idx++)
        {
            Node value = 
            nodes.item(idx).getAttributes().getNamedItem("port");
            String val = value.getNodeValue();
            logger.info(val);
        }

Таким образом, logger.info распечатывает правильное значение, поэтому я знаю, что я в нужном элементе.

Вопрос в том, как добавить атрибут и значение добавления в конец этого элемента?

Кажется, функции создания атрибута не существует.

Как только мы сможем установить атрибут и значение, я могу легко сохранить результаты в новом документе XML.

    Transformer xformer = TransformerFactory.newInstance().newTransformer();
    xformer.transform(new DOMSource(doc), new StreamResult(new File(outputFile)));

Есть идеи, как добавить новый атрибут и значение?

Надеюсь, это имело смысл:)

1 Ответ

0 голосов
/ 19 февраля 2019

Вы можете попробовать ((Element)node).setAttribute("attributeName", "value");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...