找回密码
 加入
搜索
查看: 6923|回复: 11

[效率算法] 求正则或xml:读取某一文件的某一字段的下属值

  [复制链接]
发表于 2011-11-22 22:47:36 | 显示全部楼层 |阅读模式
有一文件源码如下,是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>的值
发表于 2011-11-22 22:54:03 | 显示全部楼层
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[0])

评分

参与人数 2威望 +18 金钱 +109 贡献 +12 收起 理由
kn007 + 18 + 99 + 10 谢谢AFAN啦。。。哎,正则真是有用的东西
lixiaolong + 10 + 2

查看全部评分

 楼主| 发表于 2011-11-22 22:54:44 | 显示全部楼层
暂时用
$sXMLFile = @ScriptDir & "\user.config"
$uReadXML = FileRead (fileopen ($sXMLFile,0))
$uTitle = StringRegExp($uReadXML, '<value>(.*)</value>', 3)

msgbox(0,0, $uTitle[8])
解决

求更好的解决办法,这个太傻了
发表于 2011-11-23 00:04:20 | 显示全部楼层
回复 2# afan


    xml有一很大特点,就是标签位置灵活性比较好,内容可以和标签放同一行,也可以不同行,所以你的正则有待完善
发表于 2011-11-23 00:16:56 | 显示全部楼层
本帖最后由 afan 于 2011-11-23 00:22 编辑

回复 4# binghc


    谢谢提醒,我这只是针对007给出比较容易理解的例子~ 有时候,既定的东西也不一定非得做过多的判断~ 要修改完善点也很简单
(?i)<[^<]+paibanci"[^>]+>\s*<value>([^<]+)

评分

参与人数 1威望 +10 金钱 +99 贡献 +10 收起 理由
kn007 + 10 + 99 + 10 谢谢指导

查看全部评分

发表于 2011-11-23 09:24:17 | 显示全部楼层
本帖最后由 binghc 于 2011-11-23 09:29 编辑

回复 5# afan
<setting name="paibanci" serializeAs="String">
     
   <hello>hello</hello>
   <value>
        19730
   </value>
     
</setting>
既定的东西也不一定非得做过多的判断~ 要修改完善点也很简单


说的没错,正则很多时候呢,都是正对既定的环境应用的,因为不太好想到也没必要想其他可能应用的情况,“修改很简单”这也没错,修改后跟你原来表达式也没多大区别。所以个人依然认为,xml这个东西,什么样的格式还是比较容易想到,何不写的通用性更好点儿。像上面这样的格式,修改后依然和原来没多大区别,但是可以任这个xml文件变化,只要它依然书写合法,表达的依然是原来意思
发表于 2011-11-23 09:51:40 | 显示全部楼层
回复 4# binghc
我对XML结构不了解,猜下
(?msi)<setting.*?paibanci.*?<value>([^<]+)
发表于 2011-11-23 11:36:50 | 显示全部楼层
回复 6# binghc


    HTML或者XML或者其它有语法的格式,我一概没学过,也没兴趣,我就只当它们是一堆字符串,所以我写的表达式只会针对提问者的提供的字符串,因此我也经常对提问者提出对提供的字符串“尽量考虑适应多种情况”的建议~ 你提供的字符串肯定也只是片面的,也没有提供多种情况,所以,我也没有兴趣再做“简单的修改”,如果你自己有兴趣可以写给007参考,他可是加分达人,哈~
发表于 2011-11-23 12:00:45 | 显示全部楼层
回复 8# afan


    呵呵~
发表于 2011-11-23 18:00:43 | 显示全部楼层
回复 9# binghc

这样好不好?
(?si)<setting name="paibanci".+<value>\s*(\S+)\s*</value>
发表于 2011-11-23 20:42:27 | 显示全部楼层
看到楼上几位的 正则 深感自己的正则要进一步学习了!...
发表于 2011-11-24 17:03:28 | 显示全部楼层
回复 10# lixiaolong


    这样很好!哈哈~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-1 07:05 , Processed in 0.098341 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表