我有一个如下所示的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Start xmlns="http://soap.sforce.com/2006/04/metadata">
<applicationVisibilities>
    <application>Foo1</application>
    <default>false</default>
    <visible>false</visible>
</applicationVisibilities>
<applicationVisibilities>
    <application>Foo2</application>
    <default>false</default>
    <visible>false</visible>
</applicationVisibilities>
<applicationVisibilities>
    <application>Foo3</application>
    <default>false</default>
    <visible>false</visible>
</applicationVisibilities>
</Start>基于一些与applicationKey相关的逻辑,我想删除下面的XML。我该怎么做呢?目前,我可以删除子节点,但不能删除仅与FOO2相关的applicationVisibilities节点及其所有子节点
<applicationVisibilities>
    <application>Foo2</application>
    <default>false</default>
    <visible>false</visible>
</applicationVisibilities>Java代码:
final NodeList origNodeList = document.getElementsByTagName("applicationVisibilities");
    for (int temp = 0; temp < origNodeList.getLength(); temp++) {
        Node nNode = origNodeList.item(temp);
        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
            Element eElement = (Element) nNode;
            final String application = eElement.getElementsByTagName("application").item(0).getTextContent();
            if(application.equals("Foo2")) {
                Node node = eElement.getElementsByTagName("application").item(0);
                if (node != null) {
                    if (node.getNodeName().equals("application")) {
                        node.getParentNode().removeChild(node);
                        node.normalize();
                        eElement.normalize();
                    }
                }
            }
        }
    }发布于 2021-03-25 05:09:51
在下面的解决方案中,我转换了xml string to classes。然后从Start类的列表中删除指定的应用程序。最后,对象由jackson-dataformat-xml转换为xml字符串。
我使用了以下maven依赖项:
<dependency>
       <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-xml</artifactId>
      <version>2.11.1</version>
</dependency>String xml =
        """
        <?xml version="1.0" encoding="UTF-8"?>
        <Start xmlns="http://soap.sforce.com/2006/04/metadata">
            <applicationVisibilities>
                <application>Foo1</application>
                <default>false</default>
                <visible>false</visible>
            </applicationVisibilities>
            <applicationVisibilities>
                <application>Foo2</application>
                <default>false</default>
                <visible>false</visible>
            </applicationVisibilities>
            <applicationVisibilities>
                <application>Foo3</application>
                <default>false</default>
                <visible>false</visible>
            </applicationVisibilities>
        </Start>
        """;public static void main(String[] args) {
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
        Start start = null;
        try {
            start = xmlMapper.readValue(xml, Start.class);
            List<applicationVisibilities> tempApplicationVisibilities = start.applicationVisibilities;
            for (applicationVisibilities visibility : tempApplicationVisibilities) {
                if(visibility.application.equals("Foo2")) {
                    start.applicationVisibilities.remove(visibility);
                    String updatedXml = xmlMapper.writeValueAsString(start);
                    System.out.println(updatedXml);
                }
            }
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
}
public static class applicationVisibilities {
    public String application;
    @JacksonXmlProperty(localName = "default")
    public boolean _default;
    public boolean visible;
}
public static class Start {
    @JacksonXmlProperty(localName = "applicationVisibilities")
    @JacksonXmlElementWrapper(useWrapping = false)
    public List<applicationVisibilities> applicationVisibilities;
}输出:
<Start>
  <applicationVisibilities>
    <application>Foo1</application>
    <visible>false</visible>
    <default>false</default>
  </applicationVisibilities>
  <applicationVisibilities>
    <application>Foo3</application>
    <visible>false</visible>
    <default>false</default>
  </applicationVisibilities>
</Start>https://stackoverflow.com/questions/66788635
复制相似问题