php - 使用存储为 MySQL 数据库中文本的路径访问嵌套的 XML 节点
问题描述
我正在解析多个 XML 文件。所需节点的路径已存储在我的 MySQL 数据库中,以便于访问。
未嵌套的路径不会产生问题。但是当我存储像“fields->sub_category”这样的路径时,“->”选择器似乎有问题。当我在代码中真正编写路径时,它可以工作,但是当我从数据库中检索字符串并将其用作变量时,它无法工作。当它来自数据库时,为什么我不能将此语法用作变量?
使用 phpmyadmin,我尝试将索引属性从 varchar 更改为 text,更改排序规则等,但无济于事。
我还尝试在没有'->'的情况下存储'category subcategory'之类的路径,并在使用str_replace之间添加它。这也行不通。
$nodes = $connect->prepare("SELECT * FROM table");
$nodes->execute();
$node = $nodes->fetch(PDO::FETCH_ASSOC);
$title_node = $node['title']; //value is 'name'
$category_node = $node['subcategory']; //value is 'fields->sub_category'
$feedlink = "http://link.to.myfeed.com/feed.xml";
$x = new XMLReader;
$doc = new DOMDocument;
$x->open($feedLink);
while ($x->read() && $x->name !== 'product');
while ($x->name == 'product') {
$p = simplexml_import_dom($doc->importNode($x->expand(), true));
echo $p->$title_node; // Actually returns all the titles found
echo $p->$category_node; // Does absolutely nothing
}
我预计
echo $p->$category_node;
将返回该节点内的实际数据,但找不到路径。包含特殊字符 '->' 的字符串是怎么回事?
这是 XML 结构的简化版本:
<product>
<name>Productname</name>
<price>99.99</price>
<fields>
<categories>Main category data</categories>
<color>Black</color>
<sub_category>Sub category data</sub_category>
</fields>
</product>
解决方案
在 SimpleXML 中,您不能随意使用它...
$category_node = $node['subcategory']; //value is 'fields->sub_category'
正如您稍后提到的,这是因为->
名称中的 ,这是 SimpleXML 的一个限制,即每个元素必须是单独的。
为了解决这个问题,您可以使用一种简短的方法为您执行此操作,它将节点名称拆分为其组件(使用explode()
),然后循环遍历每个组件,更改每个级别的节点......
function getNode( $node, $path ) {
foreach ( explode("->", $path) as $step ) {
$node = $node->$step;
}
return $node;
}
所以而不是
echo $p->$category_node; // Does absolutely nothing
采用...
echo getNode($p, $category_node);
推荐阅读
- c++ - 如何将 msbuild 中的内联汇编转换为 gcc
- xamarin.forms - 是否可以在 OneSignal 中使用具有不同外部用户 ID 的一个玩家 ID
- javascript - React.Dispatch 时如何为 setState 函数定义 TypeScript 类型
> 不接受? - .net - 使屏幕阅读器可以访问分组的 WPF ItemsControl
- php - Laravel 8根据类别ID数据获取产品
- c# - 将 Json 数据转换为 datagridview C#
- ejabberd - 是否可以使用 ejabberd REST API 更新房间标题(和其他选项)?
- python - 如何通过python将文件从Sharepoint复制到本地文件夹
- bash - 带有模式和引号字符的 bash 循环
- vba - VBA Excel 无法更改绘图标题的布局