【问题标题】:Remove the remaining new line after using VTD-XML to remove an element使用 VTD-XML 删除元素后删除剩余的新行
【发布时间】:2013-07-19 03:11:25
【问题描述】:

我正在尝试使用 VTD-XML 从父元素中删除一组子元素。

不幸的是,删除一个元素后,它会留下已删除元素先前占用的新行。 VTD-XML 作者here 的一篇关于VTD-XML 的文章的读者也观察到了这种行为。我正在研究如何删除这条新行。

通过操纵存储在底层 64 位 VTD 令牌中的长度值来覆盖换行符(额外的 2 个字节),我设法取得了一点成功。代码sn-p如下:

// XMLModifier modifier
modifier.remove(vn.getElementFragment()+0x200000000L);

我已经测试了这在 VTD-XML 示例的ex_16 中提供的old_cd.xml 上运行良好。

但是,当我在我的工作文件上尝试同样的方法时,当我尝试调用 modifier.output() 时会引发 ModifyException 错误,特别是由 modifier.check2() 引发的错误。

问题

1。为什么上述方法会导致check2() 失败?我认为我没有溢出 VTD 令牌上的位,文件小于 2MB。 请参阅更新。
2. 有没有更好的办法去掉剩余的新行?

我对 VTD-XML 还很陌生,因此我非常感谢任何建议和见解,并向更有经验的用户学习。

感谢您的帮助。

更新
哇,在写这个问题的过程中,我意识到我忘记考虑不同的字符编码并将调整长值更新为 1 字节修复了check2() 问题! (花时间暂停并重新思考/写出问题的另一个原因)。

我仍然想从更有经验的用户那里了解是否有更好的方法。

【问题讨论】:

  • 这是一个表演障碍吗?你设法解决了这个问题吗?
  • 不是一个显示停止器,我确实解决了这个问题,但我想知道是否有更好的方法来使用 VTD-XML 删除新行,而不必直接操作底层令牌的位。如果没有实质性答案,我将添加我的方法的详细信息作为答案。
  • 这必须在 api 级别完成,可能通过添加新方法来完成。请注意,元素段之前和/或之后可以有多个换行符。新方法也必须处理这一点。
  • 是的,我同意这是我必须做的。我编写了一个非常简单的实用程序来使用 getCurrentDepth() 调用更新偏移和长度位。虽然我没有检查溢出,但对于大多数用例来说这应该不是问题。如果将 VTDNav 中编码的静态整数放在映射中以便快速查找字符集,也可能会很好。
  • 2.12 将在 VTDNav 的核心 api 中添加一个名为 expandWhiteSpace 的方法,它需要一个 64 位并返回一个 64 位 int。

标签: java vtd-xml


【解决方案1】:

为了回答您的问题,我认为这需要在 API 级别完成,并且需要注意一些额外的细节,例如删除所有周围空白或不删除任何空白的选项。需要在下个版本中完成...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多