Мне нужно динамически обновить файл 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)));
Есть идеи, как добавить новый атрибут и значение?
Надеюсь, это имело смысл:)