我需要为Apache tomcat动态更新server.xml并添加新的属性和值。此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打印出正确的值,所以我知道我在正确的元素中。
问题是如何在此元素的末尾添加append属性和值?
似乎没有创建属性函数。
一旦我们可以设置属性和值,那么我可以轻松地将结果保存到新的xml文档中。
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(new DOMSource(doc), new StreamResult(new File(outputFile)));
有什么想法可以附加新的属性和值吗?
我希望这是有道理的:)
答案 0 :(得分:1)
您可以尝试((Element)node).setAttribute("attributeName", "value");