正则表达式提取纯文本XML节点

时间:2014-02-13 18:43:47

标签: php regex bash sed

我有一个大型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。这可以通过正则表达式完成,还是我只需要复制并粘贴文件中的东西? (我的正则表达式技能很低)

1 个答案:

答案 0 :(得分:1)

Don't parse XML with regexes。没有理由你不能使用SimpleXML重新打包/重新排列数据,但尝试使用正则表达式来解决许多令人头疼的问题,最终导致代码损坏。

See this classic example为什么用正则表达式解析XML / HTML / XHTML是疯狂之路。

如果您坚持使用正则表达式,只需替换您不需要的节点,如下所示:

$myxml = preg_replace('~<nodeToRegex>.*?</nodeToRegex>~', '', $myxml);

Regular expression visualization

Debuggex Demo