kn007 发表于 2011-11-22 22:47:36

求正则或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>的值

afan 发表于 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)

kn007 发表于 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)
解决

求更好的解决办法,这个太傻了

binghc 发表于 2011-11-23 00:04:20

回复 2# afan


    xml有一很大特点,就是标签位置灵活性比较好,内容可以和标签放同一行,也可以不同行,所以你的正则有待完善

afan 发表于 2011-11-23 00:16:56

本帖最后由 afan 于 2011-11-23 00:22 编辑

回复 4# binghc


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

binghc 发表于 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文件变化,只要它依然书写合法,表达的依然是原来意思{:face (411):}

3mile 发表于 2011-11-23 09:51:40

回复 4# binghc
我对XML结构不了解,猜下
(?msi)<setting.*?paibanci.*?<value>([^<]+)

afan 发表于 2011-11-23 11:36:50

回复 6# binghc


    HTML或者XML或者其它有语法的格式,我一概没学过,也没兴趣,我就只当它们是一堆字符串,所以我写的表达式只会针对提问者的提供的字符串,因此我也经常对提问者提出对提供的字符串“尽量考虑适应多种情况”的建议~ 你提供的字符串肯定也只是片面的,也没有提供多种情况,所以,我也没有兴趣再做“简单的修改”,如果你自己有兴趣可以写给007参考,他可是加分达人,哈~

binghc 发表于 2011-11-23 12:00:45

回复 8# afan


    呵呵~

lixiaolong 发表于 2011-11-23 18:00:43

回复 9# binghc

这样好不好?(?si)<setting name="paibanci".+<value>\s*(\S+)\s*</value>

bdancerlc 发表于 2011-11-23 20:42:27

看到楼上几位的 正则 深感自己的正则要进一步学习了!...

binghc 发表于 2011-11-24 17:03:28

回复 10# lixiaolong


    这样很好!哈哈~{:face (411):}
页: [1]
查看完整版本: 求正则或xml:读取某一文件的某一字段的下属值