簡體   English   中英

使用DOm和PHP將節點添加到現有XML文檔

[英]Add node to existing XML document using DOm and PHP

我希望有人能幫忙,因為這使我發瘋。

我需要使用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');

我想做的是,如果郵政編碼等於一個特定值,那么新的子節點將被添加到帶有某些文本的“地址”節點中。

我遇到了一些問題,可以在其中生成一個新的子節點,但是它將在XML文件的一個部分中添加很多子節點,而不是在每個“屬性”節點中添加一個空白。

我希望這是有道理的,因為我可以在某些幫助下真正做到。

提前致謝 :)

您應該使用DOMDocument :: createElement創建新節點,並使用DOMNode :: appendChild追加新節點。

例:

if (preg_match('/^nw(?=[0-9]*)/i', $r)) {
    $element = $dom->createElement('your_node_name', 'North West London');
    $region->parentNode->appendChild($element);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM