如何使用 PHP 将新节点保存到从 FTP 服务器加载的 XML
How to save new Node into loaded XML from FTP server using PHP
我从 FTP 服务器加载 myfile.xml(simplexml_load_file
请参阅下面的 PHP)。现在我想添加一个新节点并将这个新节点保存在从 FTP 服务器加载的 xml (myfile.xml) 文件中。
myfile.xml:
<?xml version="1.0" encoding="utf-8" ?>
<News>
<NewsModel>
<ID>1</ID>
<Headline>my First</Headline>
<ShortDescription></ShortDescription>
<Description></Description>
<LinkText></LinkText>
<Link></Link>
</NewsModel>
<NewsModel>
<ID>2</ID>
<Headline>my second</Headline>
<ShortDescription></ShortDescription>
<Description></Description>
<LinkText></LinkText>
<Link></Link>
</NewsModel>
</News>
我的PHP代码:
<?php
session_start();
$msg = '';
if (isset($_POST['btnSpeichern']) && !empty($_POST['inputHeadline']) && !empty($_POST['inputShorDesc']) && !empty($_POST['inputDesc'])) {
$ftp_server = "myhost";
$ftp_username = "myuser";
$ftp_pass = "mypassword";
$server_file = "myfile.xml";
$xmlurl = "ftp://$ftp_username:$ftp_pass%21@$ftp_server/$server_file";
$xml=simplexml_load_file($xmlurl)or die("Kann keine Verbindung zu $xmlurl aufbauen");
$entry = $xml->addChild('NewsModel');
$entry->addChild('ID',$_POST['inputIDNumber']);
$entry->addChild('Headline',$_POST['inputHeadline']);
$entry->addChild('ShortDescription',$_POST['inputShorDesc']);
$entry->addChild('Description',$_POST['inputDesc']);
$entry->addChild('LinkText',$_POST['inputLinkText']);
$entry->addChild('Link',$_POST['inputLink']);
$xml->addChild($entry);
$xml->asXML($server_file);
}
?>
文件从 FTP 服务器正确加载(我看到两个节点)。我可以将新节点添加到现有节点,但文件会另存为新文件。在新文件中,所有三个节点都可见。
我想要的是,从FTP服务器加载文件,添加一个新节点并将其保存到加载的文件中,而不是新的。
如果这不可能,我如何将新创建的文件移动到 FTP 服务器并删除现有文件?
谢谢
如果要将文件保存到FTP服务器,请在asXML
:
中使用完整的URL ($xmlurl
)
$xml->asXML($xmlurl);
我不明白为什么这对你不起作用。
或者,您可以将 XML 保存为字符串并使用原生 PHP FTP 功能,例如 FTP URL wrapper 和 file_put_contents
:
$context = stream_context_create(['ftp' => ['overwrite' => true]];
$s = $xml->asXML()
file_put_contents($xmlurl, $s, 0, $context);
我从 FTP 服务器加载 myfile.xml(simplexml_load_file
请参阅下面的 PHP)。现在我想添加一个新节点并将这个新节点保存在从 FTP 服务器加载的 xml (myfile.xml) 文件中。
myfile.xml:
<?xml version="1.0" encoding="utf-8" ?>
<News>
<NewsModel>
<ID>1</ID>
<Headline>my First</Headline>
<ShortDescription></ShortDescription>
<Description></Description>
<LinkText></LinkText>
<Link></Link>
</NewsModel>
<NewsModel>
<ID>2</ID>
<Headline>my second</Headline>
<ShortDescription></ShortDescription>
<Description></Description>
<LinkText></LinkText>
<Link></Link>
</NewsModel>
</News>
我的PHP代码:
<?php
session_start();
$msg = '';
if (isset($_POST['btnSpeichern']) && !empty($_POST['inputHeadline']) && !empty($_POST['inputShorDesc']) && !empty($_POST['inputDesc'])) {
$ftp_server = "myhost";
$ftp_username = "myuser";
$ftp_pass = "mypassword";
$server_file = "myfile.xml";
$xmlurl = "ftp://$ftp_username:$ftp_pass%21@$ftp_server/$server_file";
$xml=simplexml_load_file($xmlurl)or die("Kann keine Verbindung zu $xmlurl aufbauen");
$entry = $xml->addChild('NewsModel');
$entry->addChild('ID',$_POST['inputIDNumber']);
$entry->addChild('Headline',$_POST['inputHeadline']);
$entry->addChild('ShortDescription',$_POST['inputShorDesc']);
$entry->addChild('Description',$_POST['inputDesc']);
$entry->addChild('LinkText',$_POST['inputLinkText']);
$entry->addChild('Link',$_POST['inputLink']);
$xml->addChild($entry);
$xml->asXML($server_file);
}
?>
文件从 FTP 服务器正确加载(我看到两个节点)。我可以将新节点添加到现有节点,但文件会另存为新文件。在新文件中,所有三个节点都可见。
我想要的是,从FTP服务器加载文件,添加一个新节点并将其保存到加载的文件中,而不是新的。
如果这不可能,我如何将新创建的文件移动到 FTP 服务器并删除现有文件?
谢谢
如果要将文件保存到FTP服务器,请在asXML
:
$xmlurl
)
$xml->asXML($xmlurl);
我不明白为什么这对你不起作用。
或者,您可以将 XML 保存为字符串并使用原生 PHP FTP 功能,例如 FTP URL wrapper 和 file_put_contents
:
$context = stream_context_create(['ftp' => ['overwrite' => true]];
$s = $xml->asXML()
file_put_contents($xmlurl, $s, 0, $context);