Drupal提要-导入前解析XML
我有以下xml:Drupal提要-导入前解析XML,xml,drupal,drupal-7,drupal-feeds,Xml,Drupal,Drupal 7,Drupal Feeds,我有以下xml: <xml> <data> <name id=01"> Pippo </name> <name id=02> Pinco </name> <surname id=01"> Franco </surname> <surname id=02> Pallino &l
<xml>
<data>
<name id=01">
Pippo
</name>
<name id=02>
Pinco
</name>
<surname id=01">
Franco
</surname>
<surname id=02>
Pallino
</surname>
</data>
<xml>
佛朗哥
巴利诺
我想在节点中导入,只导入属性id=01的内容。
为此,我尝试了许多道路,但没有一条成功。
因此,我考虑在准备过程中修改xml,以构建类似以下内容的xml:
<xml>
<data>
<name id=01">
Pippo
</name>
<surname id=01">
Franco
</surname>
</data>
<data>
<name id=02>
Pinco
</name>
<surname id=02>
Pallino
</surname>
</data>
<xml>
佛朗哥
平科
巴利诺
并让feeds模块使用有用的数据创建两个节点。
但是我发现没有办法也没有有用的钩子来使用feeds模块实现这一点。做一个自定义解析器来扩展XPath解析器。我用JsonPath解析器做了类似的事情。在parse函数中,json_decode函数将发生,并将源代码转换为数组,然后查询该数组,因此您可以在json_decode调用之后和实际解析之前插入代码,以便修改检索到的数据,在您的情况下,删除不符合您需要的数组项。 您必须弄清楚如何使用XPath解析器来实现这一点,但工作流不应该如此不同。如果有机会,只需扩展Xpath解析器类并在parse方法中完成您的工作。 这就是我所做的,希望对你有帮助
$array = json_decode($raw, TRUE);
// Support JSON lines format.
if (!is_array($array)) {
$raw = preg_replace('/}\s*{/', '},{', $raw);
$raw = '[' . $raw . ']';
$array = json_decode($raw, TRUE);
}
//ARRAY MODIFICATION - FIND THE ACTUAL VERSION AMENDMENT AND MOVE THEIR CONTENTS TO THE ROOT NODE
$fields_to_move = array("fullText","sameAs","memo","lawSection","actClause","currentCommittee","coSponsors","multiSponsors","uniBill","stricken","lawCode");
foreach ($array["result"]["items"] as &$item_result){
if($item_result["activeVersion"]=="")
foreach ($fields_to_move as $field_name)
$item_result[$field_name] = $item_result["amendments"]["items"][""][$field_name];
else foreach ($item_result["amendments"]["items"] as $item)
if($item["version"] == $item_result["activeVersion"]){
foreach ($fields_to_move as $field_name)
$item_result[$field_name] = $item[$field_name];
break;
}
}
//END OF ARRAY MODIFICATION
if (is_array($array)) {
require_once drupal_get_path('module', 'feeds_jsonpath_parser').'/jsonpath-0.8.1.php';
//more stuff
}