首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP XML输出连接

问PHP XML输出连接
EN

Stack Overflow用户
提问于 2012-05-31 17:56:42
回答 3查看 222关注 0票数 0

我使用XPath查询一个xml文档,然后将找到的节点复制到一个单独的result xml文件中,但是我遇到的问题是,每次向结果文件中添加一个新节点时,都会添加顶部的XML声明。

这是我的php代码:

代码语言:javascript
复制
$allEventsForVenue = $xPath->query(
            "/Ticket/EventsPoints/Event[contains(PerformanceName,'$searchParam')]"
    );

    foreach ($allEventsForVenue as $event) {

         $dstDom = new DOMDocument('1.0', 'utf-8');
         $dstDom->appendChild($dstDom->createElement('EventsPoints'));
         $dstDom->documentElement->appendChild($dstDom->importNode($event, true));
         //echo $dstDom->saveXml();
         $dstDom->formatOutput = true;
         $strxml .= $dstDom->saveXML();
         $handle = fopen("/var/www/html/xml/searchresults$searchID.xml", "w");
         fwrite($handle, $strxml);
         fclose($handle); 
    } 

无效的XML文件(一个文件中有两个xml声明):

代码语言:javascript
复制
->>         <?xml version="1.0" encoding="utf-8"?>
            <EventsPoints>
              <Event ID="17">
                    <PerformanceName>Bressie</PerformanceName>
                    <PresaleTime/>
                    <PriceRange>17 - 17</PriceRange>
                    <VenueID ID="19"/>
                </Event>
            </EventsPoints>
->>         <?xml version="1.0" encoding="utf-8"?>
            <EventsPoints>
              <Event ID="180">
                    <PerformanceName>U2</PerformanceName>
                    <PriceRange>20 - 20</PriceRange>
                    <VenueID ID="198"/>
                </Event>
            </EventsPoints>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-31 18:02:39

您正在循环中创建新的DOMDocument实例。此外,您在每次迭代中都在编写代码。这就是在每次迭代中生成新的XML文档,并将其附加到xml文件中。您需要做的是,对XML生成部分进行循环。而不是整个。

如果您只循环appendChild部件,您的问题将会得到解决。

代码语言:javascript
复制
$dstDom = new DOMDocument('1.0', 'utf-8');
$dstDom->formatOutput = true;    

foreach ($allEventsForVenue as $event) {
     $dstDom->appendChild($dstDom->createElement('EventsPoints'));
     $dstDom->documentElement->appendChild($dstDom->importNode($event, true));
}

file_put_contents("/var/www/html/xml/searchresults$searchID.xml", $dstDom->saveXML());
票数 3
EN

Stack Overflow用户

发布于 2012-05-31 18:02:55

DomDocument允许您在不使用xml声明的情况下输出特定节点。

只需在saveXML中包含一个节点,比如saveXML($node),其中节点是一个XMLNode类型对象。

使用这种方法,我认为可以绕过整个"create sub-xmldocument/import node“,直接在字符串中输出所需的节点。

票数 1
EN

Stack Overflow用户

发布于 2012-05-31 18:05:08

使用像这样的东西

代码语言:javascript
复制
enter <?php
 // Continued from example XML above.

 /* Search for <a><b><c> */
  $result = $xml->xpath('/a/b/c');

  while(list( , $node) = each($result)) {
    echo $node->asXML();
 }
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10831318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档