1

これが私を狂わせているので、誰かが助けてくれることを願っています。

PHP を使用して既存の XML ファイルを更新する必要があります。いずれかのノードの値が何かに等しい場合、テキストを含む新しい子要素を追加したいと考えています。

XML ファイルの例を次に示します。

<properties>
  <property>
    <address>
      <street>Example Road</street>
      <locality>Fitzrovia</locality>
      <town>London</town>
      <postcode>NW1</postcode>
    </address>
  </property>
  <property>
    <address>
      <street>Default Street</street>
      <locality>Sample</locality>
      <town>London</town>
      <postcode>EC1</postcode>
    </address>
  </property>
</properties>

私が現在持っているPHP:

$dom = new DOMDocument();
$dom->load('http://example.com/example.xml');
$xpath = new DOMXPath($dom);

$postcode = $xpath->query('property/address/postcode');
foreach($postcode as $region)
{
    $r = $region->nodeValue;
    if (preg_match('/^nw(?=[0-9]*)/i', $r)) {
        $region->nodeValue = 'North West London';
    }
    else if (preg_match('/^n(?=[0-9]*)/i', $r)) {
        $region->nodeValue = 'North London';
    }
    else if (preg_match('/^e(?=[0-9]*)/i', $r)) {
        $region->nodeValue = 'East London';
    }
    else if (preg_match('/^se(?=[0-9]*)/i', $r)) {
        $region->nodeValue = 'South East London';
    }
    else if (preg_match('/^sw(?=[0-9]*)/i', $r)) {
        $region->nodeValue = 'South West London';
    }
    else if (preg_match('/^w(?=[0-9]*)/i', $r)) {
        $region->nodeValue = 'West London';
    }
    else if (preg_match('/^ec(?=[0-9]*)/i', $r)) {
        $region->nodeValue = 'East Central London';
    }
    else if (preg_match('/^wc(?=[0-9]*)/i', $r)) {
        $region->nodeValue = 'West Central London';
    }
    else {
        $region->nodeValue = 'Outer London';
    }
}

$dom->save('export.xml');

私がやろうとしているのは、郵便番号が特定の値と等しい場合、新しい子ノードが「住所」ノードにテキストとともに追加されることです。

新しい子ノードを生成できるという問題がいくつか発生しましたが、各「プロパティ」ノード内に 1 つのインスタンスが存在するのではなく、多数の子ノードが XML ファイルの 1 つの部分にのみ追加されます。

何らかの支援があれば本当にできるので、これが理にかなっていることを願っています。

前もって感謝します :)

4

1 に答える 1

1

You should use DOMDocument::createElement to create a new node and DOMNode::appendChild to append the new node.

Example:

if (preg_match('/^nw(?=[0-9]*)/i', $r)) {
    $element = $dom->createElement('your_node_name', 'North West London');
    $region->parentNode->appendChild($element);
}
于 2013-03-22T08:50:26.960 に答える