【问题标题】:Match xml tag name using regular expression使用正则表达式匹配 xml 标签名称
【发布时间】:2016-03-03 12:44:05
【问题描述】:

某些服务返回给我无效的 xml。 例如:

<?xml version="1.0" encoding="UTF-8"?>
<root>
     <123>PHONE</123>
</root>

为了进行解析,我正在使用 java SAX 解析器并在尝试解析此 xml 时遇到异常。

所以我想创建将 替换为 <_123> 的正则表达式。 我尝试了不同的表达方式,但没有成功。

我尝试了类似的方法:

searchResponse = searchResponse.replaceAll("([^</>]*)\\d([^>]*)", "_$0");

但是没用

【问题讨论】:

  • 下划线不出现在结束标记中。我得到<_1884526>工作1884526>
  • 我强烈建议您不要使用正则表达式。看看你是否可以从服务端解决它。
  • 我无法解决这个问题,因为它是某些 CRM 系统的 API
  • 不得使用 RegEx 解析/转换 XML!查看 XQuery 或 XSLT。

标签: java regex xml


【解决方案1】:

这看起来很有帮助:

https://github.com/branaway/Japid/blob/master/src.japidplay/cn/bran/play/routing/ParamSpec.java#L21

String format = "[^/]+"; // the default regex
Class<?> type;
static final String varNamePatternText = "[a-zA-Z_$][a-zA-Z_$0-9]*";
static final String paramSpecPatternText = "(<(.+)>)?" + "(" + varNamePatternText + ")";
static final Pattern paramSpecPattern = Pattern.compile(paramSpecPatternText);

/**
 * @param s
 */
public ParamSpec(String s) {
    String[] ex = extract(s);
    name = ex[0];
    format = ex[1];
    formatPattern = Pattern.compile(format);
}

public static String[] extract(String s) {
    Matcher matcher = paramSpecPattern.matcher(s);
    if (matcher.find()) {
        String form = matcher.group(2);
        form = form == null ? "" : form;
        String var = matcher.group(3);
        return new String[] { form, var };
    }
    throw new RuntimeException("param spec does not match the pattern: " + paramSpecPatternText
            + ". The input is: " + s);
}

【讨论】:

    【解决方案2】:

    我找到了一个对你有帮助的例子。

    private boolean acceptPath(String path) {
        if(goodPaths.isEmpty())
            return true;
        //If no path in filter, return true
        boolean valid = true;
        for(Pattern pathp : goodPaths) {
            valid = pathp.matcher(path).find();
            if(valid)
                break;
        }
        return valid;
    }
    

    完整代码在这里:http://code.openhub.net/file?fid=YNJFXZrLcZ6-dCCvz9HbeTu5AbQ&cid=RNO7S9fwx24&s=Match%20xml%20tag%20name%20using%20regular%20expression&pp=0&fl=Java&ff=1&filterChecked=true&fp=3212&mp,=1&ml=0&me=1&md=1&projSelected=true#L0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多