gpt4 book ai didi

php - 使用 PHP 管理 GMail 邮件过滤器 XML 文件

转载 作者:行者123 更新时间:2023-12-04 06:42:48 26 4
gpt4 key购买 nike

由于 GMail 可以导入和导出邮件过滤器,我想使用 PHP 脚本管理从 GMail 导出的 XML 文件,因为有一些 known issues与搜索过滤器中的字符数。

我在 PHP 中找到了 simplexml_load_file 函数,并对执行的导出执行了 var_dump(),但我现在似乎无法访问生成的 XML 文件中的应用程序命名空间。

按照 PHP 手册中的各个页面,我创建了这个非常简单的脚本来读取 XML,这样我就可以开始处理我已经创建的过滤器。不幸的是,它似乎缺少关键部分!

<pre><?php

if(file_exists("mailfilters.xml")) {
$xml = simplexml_load_file("mailfilters.xml");
$namespaces = $xml->getNamespaces(true);
foreach ($namespaces as $prefix => $ns) {
$xml->registerXPathNamespace($prefix, $ns);
}
var_dump($xml);
} else {
die("Failed to open filter file");
}

?></pre>

这将返回此数据(提取)
["entry"]=>
array(268) {
[0]=>
object(SimpleXMLElement)#3 (5) {
["category"]=>
object(SimpleXMLElement)#271 (1) {
["@attributes"]=>
array(1) {
["term"]=>
string(6) "filter"
}
}
["title"]=>
string(11) "Mail Filter"
["id"]=>
string(45) "tag:mail.google.com,2008:filter:1284991916868"
["updated"]=>
string(20) "2010-10-28T11:59:31Z"
["content"]=>
object(SimpleXMLElement)#272 (0) {
}
}
[1]=>
object(SimpleXMLElement)#4 (5) {
["category"]=>
object(SimpleXMLElement)#272 (1) {
["@attributes"]=>
array(1) {
["term"]=>
string(6) "filter"
}
}
["title"]=>
string(11) "Mail Filter"
["id"]=>
string(45) "tag:mail.google.com,2008:filter:1284991925003"
["updated"]=>
string(20) "2010-10-28T11:59:31Z"
["content"]=>
object(SimpleXMLElement)#271 (0) {
}
}

这是我今天下载的 XML 文件的摘录,用于创建上述输出:
<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:apps='http://schemas.google.com/apps/2006'>
<title>Mail Filters</title>
<id>tag:mail.google.com,2008:filters:1284991916868,...,1287734777820</id>
<updated>2010-10-28T11:59:31Z</updated>
<author>
<name>My Name</name>
<email>my@email.addr.es</email>
</author>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<id>tag:mail.google.com,2008:filter:1284991916868</id>
<updated>2010-10-28T11:59:31Z</updated>
<content></content>
<apps:property name='from' value='an@email.addr.es'/>
<apps:property name='shouldArchive' value='true'/>
<apps:property name='shouldTrash' value='true'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<id>tag:mail.google.com,2008:filter:1284993579743</id>
<updated>2010-10-28T11:59:31Z</updated>
<content></content>
<apps:property name='subject' value='Some Relevant Subject'/>
<apps:property name='label' value='MyCoolLabel'/>
<apps:property name='shouldArchive' value='true'/>
</entry>

其他“apps:property”动词包括:
<apps:property name='hasTheWord' value=''/>
<apps:property name='shouldAlwaysMarkAsImportant' value=''/>
<apps:property name='doesNotHaveTheWord' value=''/>

最佳答案

乔恩,

从 Facebook 链接这个的满分,否则我从来没有见过它,我昨天正是这样做的,为谷歌服务!我认为使用 XPath 有点牵强附会,让我向您展示如何访问元素,并希望它能够为您提供足够的信息来了解您想要做什么。

您在 $xml->getNamespaces() 的正确轨道上 - 但不要在那里迭代,您需要在您想要的父元素上使用您想要的命名空间。首先,您只需要处理入口元素,因为这些是大多数,您不妨循环并检查您是否有正确的元素:

foreach($xml as $tag) {
if($tag->getName() == "entry") {
// awesome, do Cool Stuff (TM) here
}
}

现在,您拥有 $tag 变量中的元素,并且您需要 apps: 命名空间子元素。所以这样做:
$tag->getChildren($namespaces['apps']);

当您迭代该集合时,您将看到所需的信息。

哈,

洛娜

关于php - 使用 PHP 管理 GMail 邮件过滤器 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4043183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com