0

我正在尝试从 xml 替换标签。我已经通过 curl 在变量中存储了一个 xml 结果。并试图制作一个file.xml。当它

  <Topics>
  <Topic code="Balances" count="26" pagesize="100" />
  </Topics>

使用此功能,它不会返回任何匹配项。为什么?

 function get_tag( $tag, $xml ) {
    $tag = preg_quote($tag);

     preg_match_all('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>}',
               $xml,
               $matches,
               PREG_PATTERN_ORDER);

  return $matches[1];
 }
4

2 回答 2

3

您的示例是解析文档的一个非常糟糕且缓慢的实现。建议您应该查看DOMDocument对象并尝试实现它。

根据您的示例的基本用法:

$dom = new DOMDocument();
$dom->loadXML("<xml ... />"); // Current document

$replace = $dom->getElementsByTagName($tag);

foreach ($replace as $node)
{
    $xml = $dom->createDocumentFragment();
    $xml->loadXML("<xml ... />"); // XML to replace original with

    $dom->replaceChild($xml, $node); // XML is your new node
}

$dom->normalize(); // Saves the changes
echo $dom->saveXML(); // Output

编辑; 对不起 - 现在更好的例子。

于 2012-09-20T06:57:48.300 回答
0

这是你想要的:

<?php

$xml = '
<tag1>
    <tag2>
        x
    </tag2>
    <tag3>
    </tag3>
    <tag2>
        y
    </tag2>
</tag1>
';

function get_tag($tag, $xml){
    $tag = preg_quote($tag);

    preg_match_all('/<'.$tag.'.*?>(.*?)<\/'.$tag.'>/s', $xml, $matches, PREG_PATTERN_ORDER);

    return $matches[1];
}

print_r(get_tag('tag2', $xml));

?>

输出:

Array
(
    [0] => 
        x

    [1] => 
        y

)
于 2012-09-20T06:57:37.317 回答