求正则或xml:读取某一文件的某一字段的下属值
有一文件源码如下,是xml,对这个不熟悉,用了半天ACN_XMLDomWrapper,除了错误,还是错误,失望,求解!<?xml version="1.0" encoding="utf-8"?><configuration>
<userSettings>
<WindowsApplication1.My.MySettings>
<setting name="paiban_point" serializeAs="String">
<value>定制</value>
</setting>
<setting name="zongzuobiao" serializeAs="String">
<value>日期</value>
</setting>
<setting name="riqigeshi" serializeAs="String">
<value>日期和星期</value>
</setting>
<setting name="dingzhi" serializeAs="String">
<value>29019</value>
</setting>
<setting name="yingshe" serializeAs="String">
<value>否</value>
</setting>
<setting name="lxzb" serializeAs="String">
<value>-1</value>
</setting>
<setting name="lxxx" serializeAs="String">
<value>-1</value>
</setting>
<setting name="fenban" serializeAs="String">
<value>统</value>
</setting>
<setting name="paibanci" serializeAs="String">
<value>19730</value>
</setting>
</WindowsApplication1.My.MySettings>
</userSettings>
</configuration>想读取到: <setting name="paibanci" serializeAs="String">
<value>19730</value>
</setting>
里面的<value>,即读取setting name="paibanci"的<value>的值 Local $Str = _
' <setting name="paibanci" serializeAs="String">' & @CRLF & _
' <value>19730</value>'
Local $Test = StringRegExp($str, 'paibanci.+?\v+.+?>([^<]+)', 1)
If Not @Error Then MsgBox(0, '', $Test) 暂时用
$sXMLFile = @ScriptDir & "\user.config"
$uReadXML = FileRead (fileopen ($sXMLFile,0))
$uTitle = StringRegExp($uReadXML, '<value>(.*)</value>', 3)
msgbox(0,0, $uTitle)
解决
求更好的解决办法,这个太傻了 回复 2# afan
xml有一很大特点,就是标签位置灵活性比较好,内容可以和标签放同一行,也可以不同行,所以你的正则有待完善 本帖最后由 afan 于 2011-11-23 00:22 编辑
回复 4# binghc
谢谢提醒,我这只是针对007给出比较容易理解的例子~ 有时候,既定的东西也不一定非得做过多的判断~ 要修改完善点也很简单(?i)<[^<]+paibanci"[^>]+>\s*<value>([^<]+) 本帖最后由 binghc 于 2011-11-23 09:29 编辑
回复 5# afan <setting name="paibanci" serializeAs="String">
<hello>hello</hello>
<value>
19730
</value>
</setting>既定的东西也不一定非得做过多的判断~ 要修改完善点也很简单
说的没错,正则很多时候呢,都是正对既定的环境应用的,因为不太好想到也没必要想其他可能应用的情况,“修改很简单”这也没错,修改后跟你原来表达式也没多大区别。所以个人依然认为,xml这个东西,什么样的格式还是比较容易想到,何不写的通用性更好点儿。像上面这样的格式,修改后依然和原来没多大区别,但是可以任这个xml文件变化,只要它依然书写合法,表达的依然是原来意思{:face (411):} 回复 4# binghc
我对XML结构不了解,猜下
(?msi)<setting.*?paibanci.*?<value>([^<]+) 回复 6# binghc
HTML或者XML或者其它有语法的格式,我一概没学过,也没兴趣,我就只当它们是一堆字符串,所以我写的表达式只会针对提问者的提供的字符串,因此我也经常对提问者提出对提供的字符串“尽量考虑适应多种情况”的建议~ 你提供的字符串肯定也只是片面的,也没有提供多种情况,所以,我也没有兴趣再做“简单的修改”,如果你自己有兴趣可以写给007参考,他可是加分达人,哈~ 回复 8# afan
呵呵~ 回复 9# binghc
这样好不好?(?si)<setting name="paibanci".+<value>\s*(\S+)\s*</value> 看到楼上几位的 正则 深感自己的正则要进一步学习了!... 回复 10# lixiaolong
这样很好!哈哈~{:face (411):}
页:
[1]