使用VTD-XML仅修改元素文本

时间:2010-05-05 13:44:26

标签: java xml xsd vtd-xml

我想在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()然后添加标记。但是,我不知道如何将属性复制到新标签。

谢谢你 巴拉

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 个答案:

答案 0 :(得分: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吗?