Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML,使用PHP创建文件_Php_Xml - Fatal编程技术网

XML,使用PHP创建文件

XML,使用PHP创建文件,php,xml,Php,Xml,我有一个SQL数据库,正在对其执行以下查询 $statistics="SELECT firstname AS 'user', count( * ) AS 'num',member_id AS ID FROM members JOIN member_photo USING ( member_id ) GROUP BY firstname "; $result= mysql_query($statisti

我有一个SQL数据库,正在对其执行以下查询

        $statistics="SELECT firstname AS 'user', count( * ) AS 'num',member_id AS ID
        FROM members
        JOIN member_photo
        USING ( member_id )
        GROUP BY firstname ";
        $result= mysql_query($statistics);
       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
这将检索上传者以及他们以以下格式上传的照片数量

        Uploader  Number of photos uploaded
          mun             20
          ris             10
          moz              5
       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
我想要的是一个PHP脚本来创建XML文件。它必须实际保存在我的目录中。我使用SimpleXML来实现这一点

       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
我就是这么做的

    $xmlDoc=loadXMLDoc("photo.xml");

        $statistics="SELECT firstname AS 'user', count( * ) AS 'num',member_id AS ID
        FROM members
        JOIN member_photo
        USING ( member_id )
        GROUP BY firstname ";
        $result= mysql_query($statistics);


    while($row=mysql_fetch_assoc($result)) {

    $uploader=$xml->addChild('uploader');
    $uploader->addAttribute('ID',$row['ID']);
    $uploader->addChild('Name', $row['user']);
    $uploader->addChild('Photos_Uploaded', $row['num']);
    $xml->asXML('photo.xml');

    }
       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
其中photo.xml是保存xml节点的文件。它们是这种格式的

      <?xml version="1.0"?>

      <?xml-stylesheet type="text/xsl" href="user.xsl"?>


      <users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="users.xsd">




       <uploader ID="11"><Name>moz</Name><Photos_Uploaded>2</Photos_Uploaded>             </uploader>

       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>

      </users>
       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>

moz2
Mun6
风险10
现在假设用户“Moz”上传了一张新照片。他的照片计数器最初是2,应该改为3。XML文件应该反映这种更改,对吗?这是因为它从数据库中提取数据(还记得查询吗?),但问题出在这里

      <uploader ID="11"><Name>moz</Name><Photos_Uploaded>2</Photos_Uploaded>             </uploader>

       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
moz2
Mun6
风险10
moz3

       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
Mun6
风险10
它还复制了其他节点,从而将复制创建到XML文件中

       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
我想到的是

       <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>

      <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
  • 在再次填充XML文件之前,首先清除该文件
    有人知道怎么做吗?使用php或javascript?

    那么您是在询问如何在编写/重写photo.xml文件之前“清空”它?对吗

           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
    
          <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
    
    我不熟悉SimpleXML,所以我不知道是否有一个标志可以用于它,但您可以始终使用:

           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
    
          <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
    
    $f = fopen("photo.xml", "w");
    fclose($f);
    
    这将:“仅为写入而打开;将文件指针放在文件开头,并将文件截断为零长度。如果文件不存在,请尝试创建它。”

           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
    
          <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
    
    (见:)

           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
    
          <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
    
    编辑

           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
    
          <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
    
    仔细查看SimpleXML之后,您可能希望有两个文件,一个是要加载的xml文档模板,另一个是要保存的文件(photo.xml)。使用带有“w”标志的fopen将清除内容,但也会丢失xml结构

           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
    
          <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
    
    所以实际上,你可能根本不需要使用fopen

           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
    
          <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
    
    $xmlDoc=loadXMLDoc("photo_template.xml");
    
            $statistics="SELECT firstname AS 'user', count( * ) AS 'num',member_id AS ID
            FROM members
            JOIN member_photo
            USING ( member_id )
            GROUP BY firstname ";
            $result= mysql_query($statistics);
    
    
        while($row=mysql_fetch_assoc($result)) {
    
        $uploader=$xml->addChild('uploader');
        $uploader->addAttribute('ID',$row['ID']);
        $uploader->addChild('Name', $row['user']);
        $uploader->addChild('Photos_Uploaded', $row['num']);
        $xml->asXML('photo.xml');
    
        }
    
    其中photo_template.xml看起来像:

           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
    
          <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
    
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="user.xsl"?>
        <users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="users.xsd">
        </users>
    
    
    
    而photo.xml最终将看起来像:

           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
    
          <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
    
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="user.xsl"?>
        <users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="users.xsd">
           <uploader ID="11"><Name>moz</Name><Photos_Uploaded>2</Photos_Uploaded>             </uploader>
           <uploader ID="13"><Name>Mun</Name><Photos_Uploaded>6</Photos_Uploaded></uploader>
           <uploader ID="12"><Name>ris</Name><Photos_Uploaded>10</Photos_Uploaded></uploader>
        </users>
    
    
    moz2
    Mun6
    风险10
    
    +1为了向其他人展示足够的示例代码以理解您的问题,您总是从数据库中获取要写入文件的完整数据集?是的,总是因为删除内容并再次写入整个新内容更容易、更简单+1表示打开标志“w”。这可能比有选择地附加新条目的xml节点条件化检查更有意义。但是打开标志“w”会删除我不想删除的xml结构。谢谢mason81。你是个救生员!