Java将属性和值附加到现有XML

时间:2019-02-19 18:41:22

标签: java xml tomcat

我需要为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)));

有什么想法可以附加新的属性和值吗?

我希望这是有道理的:)

1 个答案:

答案 0 :(得分:1)

您可以尝试((Element)node).setAttribute("attributeName", "value");