【问题标题】:String replace in substring子字符串中的字符串替换
【发布时间】:2012-04-03 02:10:08
【问题描述】:

我想为 Java 类编写一个方法。该方法接受下面给出的 XML 数据字符串作为输入。

<?xml version="1.0" encoding="UTF-8"?>
<library>

    <book>
        <name> <> Programming in ANSI C <> </name>
        <author> <>  Balaguruswamy <> </author>
        <comment> <> This comment may contain xml entities such as &, < and >. <> </comment>
    </book>

    <book>
        <name> <> A Mathematical Theory of Communication <> </name>
        <author> <> Claude E. Shannon <> </author>
        <comment> <> This comment also may contain xml entities. <> </comment>
    </book>

    <!-- This library contains more than ten thousand books. -->
</library>

XML 字符串包含很多以 开头和结尾的子字符串。子字符串可能包含 XML 实体,例如 &'". 该方法需要将它们替换为 ><&>" 分别。

在 Java 中是否有任何正则表达式方法来完成这项任务?

【问题讨论】:

  • 您是要转义所有 XML,还是只转义标签之间的 ?
  • 谁在生成 XML?似乎解决问题的正确方法是输出有效的 xml,而不是修改内容。
  • 子字符串取自数据库。由于 XML 字符串可能包含超过三万个子字符串,因此在添加到 XML 字符串之前转义所有 XML 实体将是低效的。这就是为什么我们只引入 并且该方法负责在使用它之前对 XML 实体进行转义。

标签: java xml regex


【解决方案1】:

这些数据是传递给您的,还是您可以控制它?如果是这样,那么我建议使用CDATA 块。如果您真的不确定输入到 xml 块中的数据,那么只需将所有内容包装在 CDATA 中,然后再将其保存到数据库中

如果您对此没有控制权,那么据我所知,由于您可能必须处理的边缘情况的数量,这将需要大量的编码。不是一个简单的正则表达式能够处理的事情(如果一个有效的块正在开始,如果一个正在结束,如果一个已经结束,等等)

这是 案例的一个非常基本的正则表达式,但我真的相信其余的会变得非常复杂

\<\>* //For <> changes

【讨论】:

  • 哇!我认为这对我来说是一个新想法。这不是我试图遵循的。我认为这对我有用。我应该用“”,并且应该替换子字符串“]]>”之后的所有“”,对吧?
  • 很抱歉之前的删除,我分心并误读了您的评论,所以我想稍后我会改写我的答案。我已经更新了它,很快就会给出一些有效的正则表达式 :) 但是,如果你可以用 CDATA 块保存数据,那会让生活更轻松 :D
【解决方案2】:

你可以关注an example

  1. 通过 Dom 或 SAX 读取 XML 文件
  2. 用正则表达式替换字符串
  3. 通过 Dom 或 SAX 编写 XML 文件

【讨论】:

  • 由于子字符串包含XML实体,读取Dom会失败,对吧?
  • 我不确定;请尝试一下,让我知道结果。谢谢
猜你喜欢
  • 2013-07-23
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多