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 に答える