Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用RegExp将XML标记替换为空格(标记的长度)_Java_Xml_Regex - Fatal编程技术网

Java 使用RegExp将XML标记替换为空格(标记的长度)

Java 使用RegExp将XML标记替换为空格(标记的长度),java,xml,regex,Java,Xml,Regex,我需要从xml文档中去掉所有xml标记,但保留标记占用的空间,以便文本内容保持与xml中相同的偏移量。这需要在Java中完成,我认为RegExp是一种可行的方法,但我没有找到简单的方法来获得与正则表达式匹配的标记长度 基本上我想要的是: Pattern p = Pattern.compile("<[^>]+>[^<]*]+>"); Matcher m = p.matcher(stringWithXMLContent); String strippedConten

我需要从xml文档中去掉所有xml标记,但保留标记占用的空间,以便文本内容保持与xml中相同的偏移量。这需要在Java中完成,我认为RegExp是一种可行的方法,但我没有找到简单的方法来获得与正则表达式匹配的标记长度

基本上我想要的是:

Pattern p = Pattern.compile("<[^>]+>[^<]*]+>"); 
Matcher m = p.matcher(stringWithXMLContent); 
String strippedContent = m.replaceAll("THIS IS A STRING OF WHITESPACES IN THE LENGTH OF THE MATCHED TAG");
Pattern p=Pattern.compile(“]+>[^”);
Matcher m=p.Matcher(stringWithXMLContent);
String strippedContent=m.replaceAll(“这是匹配标记长度中的一个空白字符串”);
希望有人能帮助我以一种简单的方式做到这一点!

因为XML中的开始和结束标记总是围绕着字符,使用简单的状态机可能会更简单。只需循环所有字符(以某种可写形式-不存储在字符串中),如果在“替换模式”并开始用空格替换所有字符,直到遇到代码>(请确保同时替换开头的
和结束代码>)

如果您关心布局,您可能希望避免替换制表符和/或换行符。如果您只关心字符串的总长度,那么这显然无关紧要

编辑:如果您想要支持注释、处理说明和/或CData部分,您也需要明确地识别它们;而且,不幸的是,属性值也可以包括
;所有这些都意味着一个完整的实现将比您想要的更复杂

常规转换器非常适合此任务;但不幸的是,这些转换器在类库中并不常见……

因为XML中的开始和结束标记总是围绕着
字符,使用简单的状态机可能更简单。只需循环所有字符即可(以某种可写形式-不存储在字符串中),如果遇到
(请确保同时替换初始
和结束代码>)

Pattern p = Pattern.compile("<[^>]+>[^<]*]+>"); 
如果您关心布局,您可能希望避免替换制表符和/或换行符。如果您只关心字符串的总长度,那么这显然无关紧要

编辑:如果您想要支持注释、处理说明和/或CData部分,您也需要明确地识别它们;而且,不幸的是,属性值也可以包括
;所有这些都意味着一个完整的实现将比您想要的更复杂

常规转换器非常适合此任务;但不幸的是,这些转换器在类库中并不常见

Pattern p = Pattern.compile("<[^>]+>[^<]*]+>"); 
(StringUtils来自Apache Commons。有关更多无背景和无库的替代方案,请参阅。)


(StringUtils来自Apache Commons。有关更多无背景和无库的替代方案,请参阅。)

为什么不使用xml拉式解析器,在遇到它时简单地回显您想要保留的所有内容,例如字符内容,每当您到达开始或结束标记时,使用元素的名称以及它所具有的任何属性找出长度,并写入适当的空格数


SAX API还具有可忽略空白的回调。因此,您还可以回显文档中出现的所有空白。

为什么不使用xml拉式解析器,只需回显遇到的所有内容,例如字符内容,并在到达开始或结束标记时使用元素名称找出长度,加上它所具有的任何属性,并写入适当数量的空格

SAX API还具有可忽略空白的回调。因此,您还可以回显文档中出现的所有空白。

也许m.start()和m.end()会有所帮助

m、 start()=>“匹配的第一个字符的索引” m、 end()=>“匹配最后一个字符后的偏移量”

(m.end()-m.start())-2并且您知道需要多少个/s。

也许m.start()和m.end()可以帮助您

**string**.replaceAll("(</?[a-zA-Z]{1}>)*", "")
m、 start()=>“匹配的第一个字符的索引” m、 end()=>“匹配最后一个字符后的偏移量”

(m.end()-m.start())-2,您知道需要多少个/s。

**string**.replaceAll(“()*”,”)
**string**.replaceAll("(</?[a-zA-Z]{1}>)*", "")
您也可以尝试此方法。它会搜索此模式的多个匹配项,然后*搜索此模式的多个匹配项

:)

**字符串**.replaceAll(“()*”,“”)
您也可以尝试此方法。它会搜索此模式的多个匹配项,然后*搜索此模式的多个匹配项


:)

为什么,哦,为什么每个人都认为正则表达式可以解决所有与字符有关的问题?:(因为大多数时候它是,对吗?;)为什么,哦,为什么每个人都认为正则表达式可以解决与字符有关的所有问题?:(因为大多数时候它是,对吗?;)这基本上是可行的,但是如果您遇到一些标记周围的注释,例如,结束“->”将保留在那里(还有标记中的“Hello”)。但这应该足以满足我目前的需要。如果字符串偏移量不是问题,您可以简单地使用XPath表达式“//text()“-填充空格以填充相同的字符串长度…这基本上是可行的,但是如果在某些标记周围遇到注释,例如,结束“->”将保留在那里(以及标记内的“Hello”)。但这应该足以满足我目前的需要。如果字符串偏移量不是问题,您可以简单地使用XPath表达式“//text()”-用空格填充相同的字符串长度…谢谢,这正是我一直在寻找的匹配器的功能!谢谢,这正是我一直在寻找的匹配器的功能!抱歉,忽略了bobincesorry的帖子,忽略了