首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除父节点DomParser Java

删除父节点DomParser Java
EN

Stack Overflow用户
提问于 2021-03-25 04:11:18
回答 1查看 34关注 0票数 0

我有一个如下所示的XML文件:

代码语言:javascript
运行
复制
<?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节点及其所有子节点

代码语言:javascript
运行
复制
<applicationVisibilities>
    <application>Foo2</application>
    <default>false</default>
    <visible>false</visible>
</applicationVisibilities>

Java代码:

代码语言:javascript
运行
复制
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();
                    }

                }
            }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-25 05:09:51

在下面的解决方案中,我转换了xml string to classes。然后从Start类的列表中删除指定的应用程序。最后,对象由jackson-dataformat-xml转换为xml字符串。

我使用了以下maven依赖项:

代码语言:javascript
运行
复制
<dependency>
       <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-xml</artifactId>
      <version>2.11.1</version>
</dependency>
代码语言:javascript
运行
复制
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>
        """;
代码语言:javascript
运行
复制
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;
}

输出:

代码语言:javascript
运行
复制
<Start>
  <applicationVisibilities>
    <application>Foo1</application>
    <visible>false</visible>
    <default>false</default>
  </applicationVisibilities>
  <applicationVisibilities>
    <application>Foo3</application>
    <visible>false</visible>
    <default>false</default>
  </applicationVisibilities>
</Start>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66788635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档