使用正则表达式在XML中提取属性值

时间:2011-02-07 23:02:42

标签: java regex groovy

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE ... ]> 
<abc-config version="THIS" id="abc">
...
</abc-config>

大家好,

在上面的代码中,如何在Groovy / Java中使用Regex提取版本属性的值?

感谢。

3 个答案:

答案 0 :(得分:2)

处理此问题的正则表达式可能类似于:

/<\?xml version="([0-9.]+)"/

关于不使用正则表达式解析标记语言的10000个讲座,我将免费为您提供一个。

修改: The One whose Name cannot be expressed in the Basic Multilingual Plane, He compelled me

答案 1 :(得分:2)

我知道你要求正则表达式,但是在Groovy中这有什么问题?

假设xml类似于:

def xml= '''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE abc-config>
<abc-config version="THIS" id="abc">
  <node></node>
</abc-config>'''

然后我可以解析它:

def n = new XmlSlurper().parseText( xml )

然后这一行:

println n.@version

打印出“这个”


如果您有problems with a more complex DOCTYPE failing to load,可以尝试通过以下方式禁用DOCTYPE检查器:

def parser = new XmlSlurper()
parser.setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false )
parser.setFeature( "http://xml.org/sax/features/namespaces", false )
parser.parseText( xml )

或使用the constructor for XmlSlurper that takes 2 parameters以禁用此检查

答案 2 :(得分:0)

不是java正则表达式,Perl正则表达式...
/<\w+\s+[^>]*?(?<=\s)version\s*=\s*["'](.+?)["'][^>]*?\s*\/?>/sg

请注意,这在许多级别上失败,我可以用正确的正则表达式填充页面,但我没有这个愿望。

这也失败了...
/<\w+\s+[^>]*?(?<=\s)version\s*=\s*(".+?"|'.+?')[^>]*?\s*\/?>/sg

这是这样的 /<\w+\s+[^>]*?(?<=\s)version\s*=\s*(["'])(.+?)\1[^>]*?\s*\/?>/sg