Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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/15.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
在PHP中解析和编辑XML文件_Php_Xml_File_Xml Parsing_Simplexml - Fatal编程技术网

在PHP中解析和编辑XML文件

在PHP中解析和编辑XML文件,php,xml,file,xml-parsing,simplexml,Php,Xml,File,Xml Parsing,Simplexml,如何在PHP中对XML文件进行以下编辑。我基本上希望保留一些元素,并将这些元素写入一个新的XML文件 因此,我知道如何打开新文件并准备编写,然后打开XML文件并逐行迭代: $lines = fopen("file.xml", "r"); $new = fopen("newFile.xml", "w"); foreach($lines as $line){ /* operations on each line here */ } 我不想对每一行执行操作,而是对file.xml中的某些元

如何在PHP中对XML文件进行以下编辑。我基本上希望保留一些元素,并将这些元素写入一个新的XML文件

因此,我知道如何打开新文件并准备编写,然后打开XML文件并逐行迭代:

$lines = fopen("file.xml", "r");
$new = fopen("newFile.xml", "w");
foreach($lines as $line){

    /* operations on each line here */
}
我不想对每一行执行操作,而是对file.xml中的某些元素执行操作

我需要做的是针对每个
元素(介于
之间的所有元素):

  • echo”“
    并在$new中换行
  • 之间写入所有内容,包括$new的标记
  • 之间写入所有内容,包括$new的标记
  • 之间写入所有内容,包括$new的标记
  • echo”“
    并换行
  • 然后转到下一个


    我将非常感谢所有帮助我学习如何做上述工作的人。

    在下面的例子中尝试做类似的事情:

    $xml = simplexml_load_file("file.xml"); //load file as SimpleXML object
    $newXml = SimpleXMLElement(); // create new SimpleXML object
    
    foreach ($xml->doc as $d){ // change "$xml->doc" to the path to doc in your file
        $doc = $newXml->addChild("doc"); // add <doc></doc>
        $doc->addChild("title", (string)$d->title); //add title child within doc
        $doc->addChild("url", (string)$d->url); //add url child within doc
        $doc->addChild("abstract", (string)$d->abstract); //add abstract child within doc
    }
    $new = fopen("newFile.xml", "w"); // open new file
    fwrite($new, $newXml->asXML()); //write XML to new file using asXML method
    fclose($new); // close the new file
    
    $xml=simplexml\u load\u文件(“file.xml”)//将文件作为SimpleXML对象加载
    $newXml=SimpleXMLElement();//创建新的SimpleXML对象
    foreach($xml->docas$d){//将“$xml->doc”更改为文件中doc的路径
    $doc=$newXml->addChild(“doc”);//添加
    $doc->addChild(“标题”,(字符串)$d->title);//在文档中添加标题子项
    $doc->addChild(“url”,(字符串)$d->url);//在文档中添加url子项
    $doc->addChild(“抽象”,(字符串)$d->abstract);//在文档中添加抽象子级
    }
    $new=fopen(“newFile.xml”,“w”);//打开新文件
    fwrite($new,$newXml->asXML())//使用asXML方法将XML写入新文件
    fclose($new);//关闭新文件
    

    希望这有帮助。您可以在这里找到simplexml的完整文档:关于Stackoverflow,这里有许多更具体的问题和答案:

    在PHP中,您有两个处理XML文件的简单选项。(还有其他的)

    第一点已经指出:

    第二种选择是

    为了让生活更加轻松,您可以使用


    使用SimpleXML怎么样?你能展示file.xml和newFile.xml的例子吗?@kren470我没听说过简单的xml。谢谢你的帮助sharing@siotxml类似于
    Title 1http://someSite.com/Title1This 是标题1链接1对标题1链接2对标题1标题2的描述http://someSite.com/Title2This 是标题2的标题2链接1对标题2的描述链接2对标题2的描述
    +1:简短和声音示例。我只是写了一些文字,所以不仅仅是代码,还留下了一些参考手册。谢谢!这很有帮助!让我困惑的一件事是注释
    //将“$xml->doc”更改为文件中doc的路径
    。为什么我要更改
    $xml->doc
    ?现在它不是在$xml或file.xml中获取所有
    元素吗?由于此脚本与file.xml位于同一目录中,所以我不必更改任何内容,对吗?嗨,Django,我在case
    doc
    中添加了注释,该注释是xml文件中其他内容的子项。例如,如果XML看起来像
    ,则必须将
    $XML->doc
    更改为
    $XML->something->doc
    。如果
    $xml->doc
    正确地获取了
    元素,则不要更改任何内容。对其进行测试时,simplexml加载文件失败,除非file.xml的第一行有
    ,并且所有元素都有一个根元素。我把
    命名为…
    @Les你好。我明白了。否,所有
    元素都是
    元素的子元素。它没有doctype/
    `因此文件加载失败。此外,没有一个
    元素围绕着所有内容。每件事物周围都有一个
    元素。我不能编辑这个文件。
    $doc = new DOMDocument;    
    $doc->load('myXMLFile.xml');
    
    $xPath = new DOMXPath($doc);
    
    // Give me all doc elements inside the XML
    $docElements = $xPath->query('doc');
    
    foreach ($docElements as $docElement) {
        // Work your magic here!
    }