我有一个这样排列的 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:device”标记之后的 XML 扁平化,我正在寻找一种方法来匹配每个“xml:device”标签继续进一步解析......踢球的是,如果“设备:角色”标签是客户端,我只能继续解析。其他任何东西都会带来太多垃圾和我的解析炸弹。
我最近的尝试(以及随后的失败)看起来像这样:
<xml:device([\s\S]+?(\b\w*Client\w*\b))</xml:device>
这适用于我 90% 的匹配项,但在文件中的某个位置 [\s\S]+? 由于缺少较早的匹配,匹配得太远了,并且仍然使我的解析炸弹。
任何帮助都会阻止我把剩下的头发拉到我们的身上。
RegEx 是我目前必须通过我们的内部工具进行此解析的唯一选择。如果你能想到一些不同的东西,请告诉我。