php - PHP 将 div 转换为自定义标签
问题描述
我正在尝试使用 PHP 将一些 html 标签转换为自定义标签。我一直在尝试使用 DOMDocument,但发现它非常麻烦。在 PHP / DOMDocument 中是否有一种简单的方法可以做到这一点?
输入:
<div class="element_wrapper">
<div class="element_header">My header</div>
<div class="element">
<div class="name">Element Name</div>
</div>
</div>
期望的输出:
<element_wrapper>
<element_header>My Header</element_header>
<element>
<name>Element Name</name>
</element>
</element_wrapper>
我的第一种方法(不完整,根据 AndrewL64 的要求添加):
<?php
$templates = Repository::fetchTemplates();
$classes = [
'element_wrapper',
'element',
'name',
'element_header',
];
foreach ($templates as $template) {
$html = '<div>' . $template['html_body'] . '</div>';
$dom = new DOMDocument();
$dom->loadHTML($html);
$finder = new DOMXPath($dom);
foreach ($classes as $class) {
$div_nodes = $finder->query("//div[@class='$class']");
/** @var DOMNode $div_node */
foreach ($div_nodes as $div_node) {
/** @var DOMElement $custom_tag */
$custom_tag = $dom->createElement($class, $div_node->nodeValue);
if ($div_node->hasAttributes()) {
foreach ($div_node->attributes as $attribute) {
if ($attribute->nodeValue === $class) {
continue;
}
$custom_tag->setAttributeNode($attribute);
}
}
$div_node->parentNode->replaceChild($custom_tag, $div_node);
}
}
}
提前谢谢了!
解决方案
要在 php 中使用DOMDocument,您可能会发现有用的 php-xml模块。
我无法想象您为什么要使用自定义标签,但您可以将 div-s 用作纯文本。要正确关闭标签,请使用数据结构堆栈(有一个模块可以处理数据结构,但您可能需要自己的“较小”模块)。
<div> - 将元素添加到堆栈
</div> - 删除一个。
最后以这种方式解析整个输入文本。
推荐阅读
- android - 为什么此代码不适用于 Pie 及更高版本?
- vbscript - 脚本自动复制自身以启动以方便使用。权限被拒绝,即使与管理员一起运行
- html - 网站在框架中加载时失去移动友好性
- python - Geopandas - 尝试更改单元格中的值仅在列为 NoneType 时才有效
- c# - 当我创建一个包含其他数据库表的“id”值的列表时,我无法达到相关表的“名称”值
- python - Python Wifi 破坏了树莓派
- django - 如何根据 Django 中的“课程”模型计算学生总数
- oracle - 在 Oracle SQL Developer 中编辑 RAW 列
- javascript - 在 Nativescript 应用程序中将 PHAsset/AVAsset 转换为 mp4 视频
- lotus-notes - 避免复制后的本地更改