提问人:Wickcheed 提问时间:7/12/2023 最后编辑:user3783243Wickcheed 更新时间:7/12/2023 访问量:38
通过变量引用 SimpleXML 节点名称
Reference SimpleXML node name via variable
问:
需要解析一个大型 XML 文档并将值添加到 SQL 数据库中。我想将所有键/值对存储在 sql 数据库中以简化我的 PHP 代码。并非所有节点都存在于所有 XML 记录中,因此需要遍历数据库值,即 classification->pn,然后查看节点是否存在,然后将值添加到 SQL 插入中。无法让它工作:
因此,而不是:
foreach($xmldata->children() as $node) {
if(isset($node->classification->pn)) {
...
}
}
我想做:
foreach($xmldata->children() as $node) {
if(isset($node->$sqlrow['childnodename'])) {
...
}
}
其中存储在我的 sql 表中。$sqlrow['childnodename'] = "classification->pn"
尝试将其视为动态变量,使用 等,但似乎没有任何效果。$$childnodename
答:
-1赞
hakre
7/12/2023
#1
你想做什么,你不能用PHP写成表达式:
foreach($xmldata->children() as $node) {
if(isset($node->$sqlrow['childnodename'])) {
...
}
}
where(存储在 mysql 表中)。$sqlrow['childnodename'] = "classification->pn"
你需要写的是:
$parts = explode('->', $sqlrow['childnodename']);
foreach($xmldata->children() as $node) {
$cursor = $node;
foreach($parts as $part) {
if (!$cursor->$part) {
continue 2; # skip to next ->children() $node
}
$cursor = $cursor->$part;
}
// $cursor is here the descendant (children, grandchildren, etc.) you're looking for
}
(仅供参考)
这是因为 “” 中的 “” 被视为 SimpleXMLElement 中 XML elment-name 的一部分,这是无效的,因为 XML 元素名称永远不允许使用该字符。->
classification->pn
>
您需要更详细地处理遍历,否则 SimpleXMLElement 只能拒绝您的请求,因为它不是 XML 元素名称。
请参阅 XML 元素名称中允许的符号
评论
classification/pn