我有一个大型XML文件。我正在解决一些问题,我想从XML文件中提取特定节点。我不想要一个SimpleXML对象,我想用原始字符串匹配我想要的新文件(在bash / sed / php上发布)。
<?xml version="1.0" encoding="UTF-8"?>
<definition></definition>
<metadata></metadata>
<nodeToRegex>
<nodeImightwant>
<subnode>
<subsubnode1></subsubnode1>
<subsubnodeToCheck>stringCheck</subnodeToCheck>
<subsubnode2></subsubnode2>
</subnode>
</nodeImightwant>
<nodeImightwant></nodeImightwant>
<nodeImightwant></nodeImightwant>
</nodeToRegex>
因此,从这个XML文件中,我想要除nodeToRegex之外的每个节点的所有行。从nodeToRegex,如果stringCheck字符串等于“aValidString”,我只想要nodeImightwant。这可以通过正则表达式完成,还是我只需要复制并粘贴文件中的东西? (我的正则表达式技能很低)
答案 0 :(得分:1)
Don't parse XML with regexes。没有理由你不能使用SimpleXML重新打包/重新排列数据,但尝试使用正则表达式来解决许多令人头疼的问题,最终导致代码损坏。
See this classic example为什么用正则表达式解析XML / HTML / XHTML是疯狂之路。
如果您坚持使用正则表达式,只需替换您不需要的节点,如下所示:
$myxml = preg_replace('~<nodeToRegex>.*?</nodeToRegex>~', '', $myxml);