2013-07-07 46 views
2

假設我有一個很簡單的輸入〔實施例XML文件如下XML插入/替換方案:JAXB(EclipseLink MOXy?)與JDOM與?

<?xml version="1.0"?> 
<content> 
    <some /> 
</content> 

我想通過在原來的結構的任何地方插入的附加元件來修改XML結構,或替換與其他內容的元素。

我可以以某種方式實現使用EclipseLink MOXy?例如。我想用「someReplacement」替換「some」並添加「whatever」。

<?xml version="1.0"?> 
<content> 
    <someReplacement> 
     <more>information</more> 
    </someRepaclement> 
    <whatever /> 
</content> 

實際的XML我想過程是比較複雜的,但是我實際上只處理其內容的一小部分,所以我寧願不來解讀完整的文件成爲一個複雜的豆結構,更改一小組元素,並將整個結構整理成一個文件。至少我不想知道複雜性。

這是因爲輸入XML模式可能差異很大,但是我關心的特定元素存在於每個這些模式中。因此,我希望找到一個解決方案,例如將XPath修改爲像綁定文件那樣指向我想要替換/插入的元素。

我不想使用JDOM,因爲我爲插入/替換生成的元素很複雜,我不想通過手工創建它們,而是要映射一些bean結構。

我可以用MOXY做這個嗎?任何其他JAXB提供者?我應該使用JDOM,還是有其他可以幫助的嗎?

+0

我認爲這實際上可以幫助:HTTP:/ /stackoverflow.com/questions/4230499/java-to-xml-conversions(使用案例#5),http://blog.bdoughan.com/2010/09/jaxb-xml-infoset-preservation.html。我會嘗試回報 – hansi

+0

如果效率很重要,您可能需要考慮vtd-xml –

回答

0

您應該使用XSLT。 XSLT發明的原因是修改XML結構。

+0

我認爲XSLT對我的用例太有限了。根據我輸入的XML結構,我生成新的內容,例如使用外部數據源,然後使用它添加或替換輸入內容。根據我的理解,我無法通過XSLT完成此任務。 – hansi

0

以下是在vtd-xml中執行此任務的代碼。 VTD-XML是唯一的XML處理框架,支持增量更新...

下面是一篇文章,解釋這個功能...

http://www.devx.com/xml/Article/36379

import java.io.*; 
import com.ximpleware.*; 

public class simpleUpdate { 
    public static void main(String[] args) throws VTDException, IOException{ 
     // TODO Auto-generated method stub 
     VTDGen vg = new VTDGen(); 
     if (!vg.parseFile("input.xml", false)) 
      return; 
     VTDNav vn = vg.getNav(); 
     XMLModifier xm = new XMLModifier(vn); 
     if (vn.toElement(VTDNav.FC)){ 
      xm.remove(); 
      xm.insertAfterElement(" <someReplacement>\n<more>information</more>\n</someRepaclement><whatever/>"); 
      xm.output("output.xml"); 
     } 
    } 
} 
相關問題