2014-10-17 124 views
0

我想根据jQuery结果从XML中删除XML节点。我有这样的XML:使用Java删除XML节点

<?xml version="1.0" encoding="UTF-8"?> 
<list> 
    <member name="James"> 
     <friendlist> 
      <friend>0001</friend> 
      <friend>0002</friend> 
      <friend>0003</friend> 
     </friendlist> 
    </member> 
    <member name="Jamie"> 
     <friendlist> 
      <friend>0003</friend> 
      <friend>0002</friend> 
      <friend>0001</friend> 
     </friendlist> 
    </member> 
    <member name="Katie"> 
     <friendlist> 
      <friend>0001</friend> 
      <friend>0003</friend> 
      <friend>0004</friend> 
     </friendlist> 
    </member> 
</list> 

我想删除完整​​标签,其名称等于“詹姆斯”,使XML应该是这样的

<?xml version="1.0" encoding="UTF-8"?> 
    <list> 

     <member name="Jamie"> 
      <friendlist> 
       <friend>0003</friend> 
       <friend>0002</friend> 
       <friend>0001</friend> 
      </friendlist> 
     </member> 
     <member name="Katie"> 
      <friendlist> 
       <friend>0001</friend> 
       <friend>0003</friend> 
       <friend>0004</friend> 
      </friendlist> 
     </member> 
    </list> 

我使用下面的代码获取节点并删除它,但得到相同的XML作为输出。它不是删除XML节点,而是给出相同的XML。

那么,如何使用xQuery并从XML中删除XML节点?

+0

一般方法:将XML反序列化(解析)为对象,遍历对象并移除需要的元素,然后连载回XML。有许多库可以用来做这件事。查找DOM和SAX解析器。 – 2014-10-17 13:19:43

+2

“我正在使用以下代码[...]”。哪些代码?我没有看到任何。 – Seelenvirtuose 2014-10-17 13:30:27

+0

你好,丹庙你可以提供一些链接或例子,那么它会更清楚 – 2014-10-17 13:45:58

回答

1

我做这样的事情与XMLBeam

public class RemoveNode { 
    public interface Projection { 
    @XBDelete("/list/member[@name='{0}']") 
    Projection removeMember(String name); 
} 

    public void main(String[] args) { 
    Projection projection = new XBProjector(Flags.TO_STRING_RENDERS_XML).io.file("yourfile.xml").read(projection.class); 
    System.out.println("Before:"+projection); 
    System.out.println("After:"+projection.removeMember("james"); 
    } 
} 

不知道阅读该文件中的XML符合您的设置。但有几种方法可以创建投影(从IOStream,资源,DOM节点,字符串...)

+0

谢谢大家对他们的建议,所有的建议都以某种方式帮助我获得了我想要的东西。 – 2014-10-21 06:02:20

+0

@DeepaliSingh:如果这种帮助有帮助,你会考虑接受吗?为此,请在其左侧找到刻度线,然后单击它,使其变为绿色。这标记为您的问题的答案,并将您的问题标记为已解决。它还会帮助你的帮手回答一些问题,并鼓励他们帮助其他人。谢谢。 – halfer 2015-11-28 10:03:21