正则表达式只从xml标记中删除uri前缀(在标记内)

时间:2011-05-11 10:39:21

标签: java regex

我需要一个正则表达式来仅从xml标记中删除uri前缀(在标记内)。

示例

输入:

<ns1:fso xlmns:="http://xyz"><sender>abc</sender></ns1:fso>

输出:

<fso xlmns:="http://xyz"><sender>abc</sender></fso>

这是我的代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public final class RegularExpressionTest {

    private static String REGEX1 = "<\\/?([a-z0-9]+?:).*?>";

    private static String INPUT = "<ns1:fso xmlns:ns1='https://www.example.com/fsoCanonical'>
 <ns2:senderId xmlns='http://www.example.com/fsoCanonical'>abc</ns2:senderId>
 <receiverId xmlns='http://www.example.com/fsoCanonical'>testdata</receiverId>   
  <messageId xmlns='http://www.example.com/fsoCanonical'>4CF4DC05126A0077E10080000A66C871</messageId>    
</ns1:fso> ";

  private static String REPLACE = "";

  public static void main(String[] args) {


    Pattern p = Pattern.compile(REGEX1);
    Matcher m = p.matcher(INPUT); // get a matcher object
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
      m.appendReplacement(sb, REPLACE);
    }
    m.appendTail(sb);
    System.out.println(sb.toString());
  }

我无法在此处粘贴输入XML

  

private static String INPUT =

不正确,如上面的代码所示。相反,你可以采取肥皂信息的任何例子。

3 个答案:

答案 0 :(得分:0)

您可以将ns1与以下正则表达式匹配:

<\/?([a-z0-9]+?:).*?>

答案 1 :(得分:0)

我更多地使用PERLs RegEx引擎,但如果它的工作方式相同,可能就是这样:

private static String REGEX1 = "(<\\/?)[a-z0-9]+:";

private static String REPLACE = "$1";

答案 2 :(得分:0)

我会改进这段代码。我不应该删除soapenv,body和header ...

(小于?/)[A-ZA-Z0-9] + :(?部首|身体|信封)

我也会包括de A-Z ......