2010-06-22 107 views
1

能否请您在Java中为我的需求(下面)提供最佳方法。我尝试过使用XPath,但我不得不重新创建整个XML。我希望如果有一个简单的方法来做到这一点。删除具有特定文本值的子节点的XML节点

我想删除节点,其xnuy = 1个

样品输入XML:

<object-stream> 
    <com.vo.ShapeEventsVO> 
    <mtx>198.0</mtx> 
    <mty>79.0</mty> 
    <xnuy>1</xnuy> 
    </com.vo.ShapeEventsVO> 
<com.vo.ShapeEventsVO> 
    <mtx>198.0</mtx> 
    <mty>79.0</mty> 
    <xnuy>1</xnuy> 
    </com.vo.ShapeEventsVO> 
<com.vo.ShapeEventsVO> 
    <mtx>198.0</mtx> 
    <mty>79.0</mty> 
    <xnuy>2</xnuy> 
    </com.vo.ShapeEventsVO> 

</object-stream> 

输出XML:

<object-stream> 
    <com.vo.ShapeEventsVO> 
    <mtx>198.0</mtx> 
    <mty>79.0</mty> 
    <xnuy>1</xnuy> 
    </com.vo.ShapeEventsVO> 
<com.vo.ShapeEventsVO> 
    <mtx>198.0</mtx> 
    <mty>79.0</mty> 
    <xnuy>1</xnuy> 
    </com.vo.ShapeEventsVO> 
</object-stream> 
+0

XSLT对于这个任务来说是完美的,但我不知道这个转换是什么。这是值得研究的。 – Pace 2010-06-22 01:42:29

回答

0

写一个简单的SAX文档处理程序 - 在每一个尽头! ELEMENT事件com.vo.ShapeEventsVO,看看xnuy,如果它适合,将ShapeEventsVO写入一个新文档。

您将只需要跟踪最近的mty,mtd和xnuy以获取生成新的xnuy == 1文档所需的所有数据。

+0

这是一个工作解决方案,但我不得不写很多java(超过100行)的代码,我对此并不满意。我仍在寻找更好的解决方案。 – firemonkey 2010-06-22 04:49:25