您知道java中的函数将验证字符串是一个很好的XML元素名称吗?
表格w3schools:
XML元素必须遵循以下命名规则:
我发现了其他提供regex解决方案的问题,难道没有这样的函数吗?
发布于 2011-03-22 18:47:01
如果使用Xerces XML解析器,可以使用XMLChar (或XML11Char)类方法,如下所示:
org.apache.xerces.util.XMLChar.isValidName(String name)还有用于可在这里找到的示例代码isValidName。
发布于 2011-03-22 18:44:17
规范中的相关产品是http://www.w3.org/TR/xml/#NT-Name。
名称::== NameStartChar NameChar * “NameStartChar ::= ":”\xF8 Z\x37F#x200C#x1FFF#x200C-#x218F#x218F #x2C00-#x2FEF #x3001-#xD7FF #xF900#xFF900#xFFDCFxFf0#xFFFD #x10000-#xEFFFF #xFFFD#x10000#xEFFFF#x218F#x2C00#x2C00-#xD7FF#xF900#xFF900#xFFFxFF0#xFFFD#xFF10000#xEFFFF#xFFFD#xEFFFF#xFFFD#xFFFD#xEFFFF#xFFFD#x2FF#xFFFD#x2FF#x2FF#xFFFD#x200C#x218F#x218F#x2C00-#xD7FF#xF900#xFF900#xF8#x2FF#x NameChar ::= NameStartChar \
因此,匹配它的正则表达式是
"^[:A-Z_a-z\\u00C0\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0370-\\u037d"
+ "\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff"
+ "\\uf900-\\ufdcf\\ufdf0-\\ufffd\\x10000-\\xEFFFF]"
+ "[:A-Z_a-z\\u00C0\\u00D6\\u00D8-\\u00F6"
+ "\\u00F8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f"
+ "\\u2c00-\\u2fef\\u3001-\\udfff\\uf900-\\ufdcf\\ufdf0-\\ufffd\\-\\.0-9"
+ "\\u00b7\\u0300-\\u036f\\u203f-\\u2040]*\\Z"如果您想处理名称空间名称,您需要确保最多有一个冒号,所以
"^[A-Z_a-z\\u00C0\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0370-\\u037d"
+ "\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\udfff"
+ "\\uf900-\\ufdcf\\ufdf0-\\ufffd]"
+ "[A-Z_a-z\\u00C0\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0370-\\u037d"
+ "\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\udfff"
+ "\\uf900-\\ufdcf\\ufdf0-\\ufffd\\-\\.0-9\\u00b7\\u0300-\\u036f\\u203f-\\u2040]*"
+ "(?::[A-Z_a-z\\u00C0\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0370-\\u037d"
+ "\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\udfff"
+ "\\uf900-\\ufdcf\\ufdf0-\\ufffd]"
+ "[A-Z_a-z\\u00C0\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0370-\\u037d"
+ "\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\udfff"
+ "\\uf900-\\ufdcf\\ufdf0-\\ufffd\\-\\.0-9\\u00b7\\u0300-\\u036f\\u203f-\\u2040]*)?\\Z"(漏掉另一个03gf;改为036f)
发布于 2011-03-22 19:15:23
使用org.apache.xerces实用程序是一个很好的方法;但是,如果您需要坚持使用作为标准Java一部分的Java代码,那么下面的代码就可以做到这一点:
public void parse(String xml) throws Exception {
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(new DefaultHandler());
InputSource source = new InputSource(new ByteArrayInputStream(xml.getBytes()));
parser.parse(source);
}https://stackoverflow.com/questions/5396164
复制相似问题