代码之家  ›  专栏  ›  技术社区  ›  Richard Knop

在XML中搜索<w:t>标记时出现php-dom问题

  •  0
  • Richard Knop  · 技术社区  · 14 年前

    所以我有一个XML文件(MS Word文件的XML导出)。我只是想替换这两行:

    <w:t>Meno:</w:t>
    

    还有:

    <w:t>Priezvisko:</w:t>
    

    这是一个较长的XML摘要:

    <w:p w:rsidR="00CF175F" w:rsidRDefault="00CF175F">
    −
    <w:r>
    <w:t>Meno:</w:t>
    </w:r>
    </w:p>
    −
    <w:p w:rsidR="00CF175F" w:rsidRDefault="00CF175F">
    −
    <w:r>
    <w:t>Priezvisko:</w:t>
    </w:r>
    </w:p>
    

    我是这样做的:

    $xml = file_get_contents('file.xml');
    
    $doc = new DOMDocument();
    $doc->loadXML($xml);
    $doc->preserveWhiteSpace = false;
    
    $wts = $doc->getElementsByTagNameNS('http://schemas.openxmlformats.org/wordprocessingml/2006/main','t');
    
    foreach ($wts as $wt) {
    
     echo 1;
    
     //if ('Meno:' === substr($wt->nodevalue, 0, 5)) {
      //echo 1;
     //}
    
    }
    

    那个剧本没有回音。为什么getElementsByTagname不起作用?XML中有几十个w:t标记。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Community Tales Farias    7 年前

    我不知道PHP,但几乎可以肯定的是,XML DOM认为“w”指的是尚未定义的名称空间。与搜索名为“w:t”的“标记”不同,您需要在“w”引用的名称空间中搜索名为“t”的标记。

    要更好地解释XML名称空间以及如何声明它们(在文档中使用“xmlns”,请参见 here .