簡體   English   中英

如何附加多個XML文件

[英]How to append multiple XML files

我有一個大型XML文件,需要永遠加載外部FTP編輯器,所以我想將其拆分為幾個文件。

我使用simplexml_load_file但無法將多個文件加載到同一個數組中。

XML文件具有相同的結構,這里是每個文件的示例:

A.XML:

<?xml version="1.0"?> 
<queries>
    <query>
      <admin_user_type>user</admin_user_type>
      <show_in_menu>True</show_in_menu>
      <title>Dashboard</title>
      <vertical_report>True</vertical_report>
  </query>
</queries>

B.XML:

<?xml version="1.0"?>
<queries>
    <query>
        <admin_user_type>admin</admin_user_type>
        <show_in_menu>false</show_in_menu>
        <title>Profile Element</title>
        <input_name>Id</input_name>
        <input_type>hidden</input_type>
    </query>
</queries>

兩個文件之間的7,000行中有大約200個查詢。

代碼在下面的foreach中失敗:

$xml = read_xml_files();
foreach($xml->children() as $xml) {
    ...
    ...
}

以下是我從奈傑爾的建議中得出的結論:

function read_xml_files() {
    $target = new DOMDocument();
    $target->loadXML('<base />');
    mergeFile($target, XML_FILES_FOLDER."a.xml");
    mergeFile($target, XML_FILES_FOLDER."b.xml");
    $xml = simplexml_import_dom($target);
    return $xml->asXML();
}

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

foreach ( $source->childNodes as $row )   {
    $import = $target->importNode($row, true);
    $target->documentElement->appendChild($import);
    }
}

謝謝你的任何建議!

如果您使用DOMDocument來執行主合並部分...

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

    foreach ( $source->childNodes as $row )   {
        $import = $target->importNode($row, true);
        $target->documentElement->appendChild($import);
    }
}
$target = new DOMDocument();
$target->loadXML('<base />');
mergeFile($target, "file1.xml");
mergeFile($target, "file2.xml");

$xml = simplexml_import_dom($target);
echo $xml->asXML();

最后,$ xml包含合並的文件。

請注意,這會為文檔添加另一個級別(除非我知道內容的類型,否則很難做其他事情)。 所以在這種情況下你會得到像...

file1.xml

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

file2.xml

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

結果將是

<?xml version="1.0"?>
<base>
<A>A</A>
<B>B</B>
</base>

更新:

你也可以試試......

function read_xml_files() {
    $target = new DOMDocument();
    $target->loadXML('<queries />');
    mergeFile($target, "NewFile.xml");
    mergeFile($target, "NewFile1.xml");
    $xml = simplexml_import_dom($target);
    return $xml->asXML();
}

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

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

這將合並文件以便得到結果

<?xml version="1.0"?>
<queries>
    <query>
        <admin_user_type>user</admin_user_type>
        <show_in_menu>True</show_in_menu>
        <title>Dashboard</title>
        <vertical_report>True</vertical_report>
    </query>
    <query>
        <admin_user_type>admin</admin_user_type>
        <show_in_menu>false</show_in_menu>
        <title>Profile Element</title>
        <input_name>Id</input_name>
        <input_type>hidden</input_type>
    </query>
</queries>

暫無
暫無

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

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