gpt4 book ai didi

java - 如何改进 XML validator 以识别正确的 XML 字符串?

转载 作者:行者123 更新时间:2023-12-01 09:03:42 26 4
gpt4 key购买 nike

我有一个基于正则表达式的 XML validator ,我想用它来识别XML 字符串。假设我有以下 XML 字符串,

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<molecules>
<molecule id="1">
<atoms>
<atom id="1" symbol="C"/>
<atom id="2" symbol="C"/>
<atom id="3" symbol="N"/>
</atoms>
<bonds>
<bond atomAId="1" atomBId="2" id="1" order="SINGLE"/>
<bond atomAId="2" atomBId="3" id="2" order="DOUBLE"/>
</bonds>
</molecule>
</molecules>

我对 XML 使用以下 validator ,

public static boolean isValidXML(String inXMLStr) {

boolean retBool = false;
Pattern pattern;
Matcher matcher;

// REGULAR EXPRESSION TO SEE IF IT AT LEAST STARTS AND ENDS
// WITH THE SAME ELEMENT
final String XML_PATTERN_STR = "<(\\S+?)(.*?)>(.*?)</\\1>";

// IF WE HAVE A STRING
if (inXMLStr != null && inXMLStr.trim().length() > 0) {

// IF WE EVEN RESEMBLE XML
if (inXMLStr.trim().startsWith("<")) {

pattern = Pattern.compile(XML_PATTERN_STR,
Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);

// RETURN TRUE IF IT HAS PASSED BOTH TESTS
matcher = pattern.matcher(inXMLStr);
retBool = matcher.matches();
}
// ELSE WE ARE FALSE
}

return retBool;
}

但是,即使对于有效的 XML,这些方法也会返回 false。如何更正 isValidXML 方法?

最佳答案

如果我没记错的话,这应该可行:

((<(\\S(.*?))(\\s.*?)?>(.*?)<\\/\\3>)|(<\\S(.*?)(.*?)(\\/>)))

我刚刚使用这个网站测试了它:https://regex101.com/ (用于进一步测试;))并添加了 java 转义反斜杠。

我基本上只是转义了正则表达式的结束标签中的正斜杠,并对标签的整个第一个内容进行了分组,因此\1 引用了整个内容。如果有什么不起作用,请告诉我:)

编辑:更改它以使其也检查带有参数的标签

编辑:经过所有编辑后,它变得相当困惑,可能可以使其看起来更好,但据我所知,它是这样工作的

关于java - 如何改进 XML validator 以识别正确的 XML 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41463379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com