2010-05-05 27 views
1

我想在vtd-xml xml修飾符類中實現下面的東西。使用VTD-XML僅修改元素文本

Original xml 
<xml> 
    <element attr1='1' attr2='2' attr3='3'>text</element> 
</xml> 

int p = vn.getText() 
xm.updateToken(p, "new text"); 

但是,此處的代碼正在將文本修改爲新文本,但它並未複製所有屬性。任何想法如何實現這一目標?

其他選項是調用xm.remove()然後添加標籤。但是,我不知道如何將屬性複製到新標籤。

謝謝
巴拉

Edit

testAP.selectXPath("pn[@category]"); 

while((j = testAP.evalXPath()) != -1) 
{ 
    int p = vn.getText(); 
    xm.updateToken(p, "new text"); 
} 

XML

<pn category = "ONE" GENERAL0 = "0" GENERAL1 = "-1" >previoustext</pn> 

以上是代碼。

+0

你確定它沒有複製所有的屬性嗎?它不應該這樣表現?你能告訴我代碼嗎?你使用的是哪個版本? – 2010-05-07 07:12:59

+0

我更新了代碼。 – Boolean 2010-05-07 09:22:54

回答

1

我不能重現該問題......下面我在您的例子中使用的XML文本,我得到的輸出是:

    <pn category="ONE" GENERAL0="0" GENERAL1="-1" >new text</pn> 

下面是測試代碼我用

 String s = "<pn category=\"ONE\" GENERAL0=\"0\" GENERAL1=\"-1\" >previoustext</pn>"; 
     vg.setDoc(s.getBytes()); 
     vg.parse(true); 
     vn = vg.getNav(); 
     AutoPilot testAP = new AutoPilot(vn); 
     testAP.selectXPath("/pn[@category]"); 
     xm.bind(vn); 
     int j; 
     while((j = testAP.evalXPath()) != -1) 
     { 
      int p = vn.getText(); 
      xm.updateToken(p, "new text"); 
     } 
     XMLByteOutputStream xbos =new XMLByteOutputStream(xm.getUpdatedDocumentSize()); 
     xm.output(xbos); 
     System.out.println(new String(xbos.getXML())); 

你使用了最新版本的vtd-xml嗎?

+0

我檢查了src/java_cup/version.java中的版本,它似乎是v10.0k。 public static final int major = 0; /*。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。*/ /**次要版本號。 */ public static final int minor = 10; /*。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。*/ /**更新信。 */ public static final update ='k'; 我希望這不是最新的。請你確認一下。 – Boolean 2010-05-07 19:51:50

+0

你能直接從vtd-xml網站下載v2.8的最新版本嗎? http://sourceforge.net/projects/vtd-xml/files/vtd-xml/ximpleware_2.8/ximpleware_2.8_java.zip/download – 2010-05-07 21:24:51