簡體   English   中英

如何使用 PHP 將 3 個 XML 文件合並為一個 xml?

[英]How Do I merge 3 XML files into one xml using PHP?

所以我需要使用 PHP 將 3 個 xml 文件合並為一個 xml 文件。 我對如何做到這一點感到有些困惑。 對此的一些指導將不勝感激。

這些是我需要合並的 3 個文件:

XML 1

<?xml version="1.0" encoding="UTF-8"?>
<CD_LIST country="USA">
<CD>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Columbia</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
</CD>
</CD_LIST>

XML 2

<?xml version="1.0" encoding="UTF-8"?>
<CD_LIST country="UK UK UK">
<CD>
  <TITLE>Hide your heart</TITLE>
  <ARTIST>Bonnie Tylor</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>CBS Records</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
</CD>
<CD>
  <TITLE>Still got the blues</TITLE>
  <ARTIST>Gary More</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Virgin records</COMPANY>
  <PRICE>10.20</PRICE>
  <YEAR>1990</YEAR>
</CD>
<CD>
  <TITLE>This is US</TITLE>
  <ARTIST>Gary Lee</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Virgin records</COMPANY>
  <PRICE>12.20</PRICE>
  <YEAR>1990</YEAR>
</CD>
</CD_LIST>

XML 3

<?xml version="1.0" encoding="UTF-8"?>
<CD_LIST country="AU AU">
<CD>
  <TITLE>Whispering Jack</TITLE>
  <ARTIST>John Farnham</ARTIST>
  <COUNTRY>AU</COUNTRY>
  <COMPANY> Farnham's studio </COMPANY>
  <PRICE>22.00</PRICE>
  <YEAR>1986</YEAR>
</CD>
<CD>
  <TITLE>Innocent Eyes</TITLE>
  <ARTIST>Delta Goodrem</ARTIST>
  <COUNTRY>AU</COUNTRY>
  <COMPANY> Delta Goodrem studio </COMPANY>
  <PRICE>13.50</PRICE>
  <YEAR>2008</YEAR>
</CD>
</CD_LIST>

最終輸出必須包括這一行:

<?xml version="1.0" encoding="UTF-8"?>

由於簡單地嘗試合並文檔存在一個小問題,因為每個文檔都有一個具有不同屬性的文檔根......

<CD_LIST country="AU AU">
<CD_LIST country="UK UK UK">
<CD_LIST country="USA">

所以有兩種可能性,一種是在這些標簽之上創建一個新標簽並復制此標簽下的全部內容,或者第二種是將所有 CD 元素復制到一個新的根元素下。

這段代碼在一個新的根目錄下簡單地將它們合並在一起......

function mergeFile ( DOMDocument $target, $fileName )    {
    $source = new DOMDocument();
    $source->load($fileName);

    $import = $target->importNode($source->documentElement, true);
    $target->documentElement->appendChild($import);
}

$target = new DOMDocument();
$target->loadXML('<?xml version="1.0" encoding="utf-8"?><CD_LIST></CD_LIST>');
mergeFile($target, "NewFile.xml");
mergeFile($target, "NewFile1.xml");
mergeFile($target, "NewFile2.xml");

$target->save("out.xml");

創建一個文檔,如...

<?xml version="1.0" encoding="utf-8"?>
<CD_LIST>
    <CD_LIST country="USA">
        <CD>
            <TITLE>Empire Burlesque</TITLE>
            <ARTIST>Bob Dylan</ARTIST>
            <COUNTRY>USA</COUNTRY>
            <COMPANY>Columbia</COMPANY>
            <PRICE>10.90</PRICE>
            <YEAR>1985</YEAR>
        </CD>
    </CD_LIST>
    <CD_LIST country="UK UK UK">
        <CD>

第二個選項是...

function mergeFile2 ( DOMDocument $target, $fileName )    {
    $source = new DOMDocument();
    $source->load($fileName);

    foreach ( $source->getElementsByTagName("CD") as $cd )   {
        $import = $target->importNode($cd, true);
        $target->documentElement->appendChild($import);
    }
}

$target = new DOMDocument();
$target->loadXML('<?xml version="1.0" encoding="utf-8"?><CD_LIST></CD_LIST>');
mergeFile2($target, "NewFile.xml");
mergeFile2($target, "NewFile1.xml");
mergeFile2($target, "NewFile2.xml");

$target->save("out2.xml");

創造...

<?xml version="1.0" encoding="utf-8"?>
<CD_LIST>
    <CD>
        <TITLE>Empire Burlesque</TITLE>
        <ARTIST>Bob Dylan</ARTIST>
        <COUNTRY>USA</COUNTRY>
        <COMPANY>Columbia</COMPANY>
        <PRICE>10.90</PRICE>
        <YEAR>1985</YEAR>
    </CD>
    <CD>
        <TITLE>Hide your heart</TITLE>
        <ARTIST>Bonnie Tylor</ARTIST>
        <COUNTRY>UK</COUNTRY>

暫無
暫無

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

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