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

发布于 2024-08-31 09:11:00 字数 689 浏览 5 评论 0原文

我想在 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

编辑

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>

以上是代码。

I want to achieve below thing in vtd-xml xml modifier class.

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

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

But the code here is modifying the text to new text but it's not copying all the attributes. Any idea how to achieve this?

Other option is to call xm.remove() and then add tag. But, I don't know how to copy the attributes to new tag.

Thank you
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>

Above is the code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倚栏听风 2024-09-07 09:11:00

我无法重现该问题...下面我在示例中使用了 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 吗?

I can't reproduce the problem... below I used the xml text in your example, the output I got is :

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

Below is the test code I used

        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()));

Did you use the latest version of vtd-xml?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文