我有一个像这样的XML文件:
<xml:head>
<xml:reportObject>
<xml:device>
<device:id>
<id:value = value />
</device:id>
<device:OpAttributes>
<OpAttributes:value = value />
<device:OpAttributes>
<device:Config>
<Config:NetConfig>
<NetIF:ID = value />
<NetHost>
<NetHost:MAC = value />
</NetHost>
</Config:NetConfig>
</device:Config>
<device:Role = value />
<device:TaggedString name="value" value="value" />
<device:Addition junk ........ />
</xml:device>
</xml:reportObject>
Lather, Rinse, Repeat for several instances on reportObjects
</xml:head>
我的问题是我正在尝试解析三个值(特别是“NetHost:MAC”,“device:Role”和“device:TaggedString”值)以转储到数据库列中的位置。
我们使用的程序是一个内部工具,它将基于RegEx匹配执行此操作,但由于XML在“xml:device”标记之后变平,我仍在寻找一种方法来匹配每个“xml” :device“标签继续进一步解析...踢球者是我只能在”device:Role“标签是客户端的情况下继续解析。还有其他东西给了太多垃圾和我的解析炸弹。
我最有效的尝试(以及随后的失败)是这样的:
<xml:device([\s\S]+?(\b\w*Client\w*\b))</xml:device>
这适用于我的90%的比赛,但在文件的某个地方,[\ s \ S] +?由于缺乏较早的匹配,并且仍在制作我的解析炸弹,所以匹配得太远了。
任何帮助都会让我不再拉我的头发。
RegEx是我目前通过内部工具进行解析的唯一选择。如果你能想到不同的东西,请告诉我。
答案 0 :(得分:2)
尝试使用正则表达式时,不要拉扯你的头发(女孩不喜欢秃头程序员),试试NSXMLParser
类(nicely documented by Apple)。设置此任务会容易得多。