Использование VTD-XML только для изменения текста элемента - PullRequest
1 голос
/ 05 мая 2010

Я хочу добиться ниже в классе модификаторов vtd-xml 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 (), а затем добавить тег. Но я не знаю, как скопировать атрибуты в новый тег.

Спасибо
Bala

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>

Над кодом указан код.

1 Ответ

1 голос
/ 07 мая 2010

Я не могу воспроизвести проблему ... ниже я использовал текст 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?

...