2011-12-22 69 views
0

我需要使用XML文档,我需要将一些字段复制到另一个XML文件。 我有这样的领域:复制XML属性PHP

<cast> 
    <person name="Nanda Anand" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000"/> 
    <person name="Lynn Collins" character="" job="Actor" id="21044" thumb="http://cf2.imgobject.com/t/p/w185/berS11tKvXqTFThUWAYrH279cvn.jpg" department="Actors" url="http://www.themoviedb.org/person/21044" order="0" cast_id="1001"/> 
</cast> 

我需要的所有元素复制到另一个XML但与属性数据.. 我用这个代码,但它不工作:

foreach ($movies->movies->movie->cast->children() as $person) 
      { 
      $person = $cast->appendChild(
        $xmldoc->createElement(("person"), str_replace("&", "&amp;",$person))); 
      } 
+0

“一点也没有'不工作'是关于你可以提供的最无用信息。什么不行?你怎么知道它不起作用?你收到错误消息吗? – hoppa 2011-12-22 10:28:56

+0

对不起。我的意思是,它只是为在结构上找到的每个人复制。我也需要复制属性。 你现在可以帮我吗? – Max 2011-12-22 10:39:20

+0

所以你只是评论一下,看看我的一个错误。你应该考虑我们在这里互相帮助。 – Max 2011-12-22 11:55:59

回答

3

如果你想操作XML文档(即添加节点从一个文档到另一个),你应该使用DOMDocum ent,而不是SimpleXML。

下面是一些使用DOMDocument从一个文档复制到另一个文档的代码。请注意,这是一个两步过程。首先以$ ndTemp的形式将节点导入到文档中。其次,将导入的$ ndTemp附加到指定的父项(我只使用根文档元素,但它可能是另一个节点)。

注意:如果你只是做一个简单的副本,你可能要考虑使用XSL,但那是另一篇文章...

输入XML(movie.xml)

<xml> 
<movie name='first'> 
    <cast> 
     <person name="Nanda Anand" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000"/> 
     <person name="Lynn Collins" character="" job="Actor" id="21044" thumb="http://cf2.imgobject.com/t/p/w185/berS11tKvXqTFThUWAYrH279cvn.jpg" department="Actors" url="http://www.themoviedb.org/person/21044" order="0" cast_id="1001"/> 
    </cast> 
</movie> 
<movie name='Second'> 
    <cast> 
     <person name="Zaphod Beeblebrox" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000"/> 
    </cast> 
</movie> 
</xml> 

PHP

<?php 
    $xml = new DOMDocument(); 
    $strFileName = "movie.xml"; 
    $xml->load($strFileName); 

    $xmlCopy = new DOMDocument(); 
    $xmlCopy->loadXML("<xml/>"); 

    $xpath = new domxpath($xml); 
    $strXPath = "/xml/movie/cast/person"; 

    $elements = $xpath->query($strXPath, $xml); 
    foreach($elements as $element) { 
     $ndTemp = $xmlCopy->importNode($element, true); 
     $xmlCopy->documentElement->appendChild($ndTemp); 
    } 
    echo $xmlCopy->saveXML(); 

?> 

输出

<?xml version="1.0"?> 
<xml> 
    <person name="Nanda Anand" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000" /> 
    <person name="Lynn Collins" character="" job="Actor" id="21044" thumb="http://cf2.imgobject.com/t/p/w185/berS11tKvXqTFThUWAYrH279cvn.jpg" department="Actors" 
    url="http://www.themoviedb.org/person/21044" order="0" cast_id="1001" /> 
    <person name="Zaphod Beeblebrox" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000" /> 
</xml> 
+0

“,感谢这么好的回应! – Max 2011-12-26 13:37:11

0

我认为这会工作,没有测试但

foreach ($movies->movies->movie->cast->children() as $person) 
{ 
    $cast->appendChild($person); 
} 
+0

谢谢,但..似乎它不工作。 在此之前,我把这个: '$ cast = $ root-> appendChild( $ xmldoc-> createElement(“cast”));' 不知道你是否可以使用该信息给我一只手! – Max 2011-12-22 10:47:47

+0

@Max:如果您必须使用createElement,则必须手动复制属性。 – RageZ 2011-12-22 10:53:30

+0

请参阅我创建一个根元素,其中我添加每个。在每个我需要添加一个的集合。这就是为什么我创建该元素“铸”..我能做些什么来复制“父母”所有的形式的$电影,包括属性? – Max 2011-12-22 11:01:17