一. tp5实现行代码
- 命令行执行文件
<?php
namespace app\command\abutment;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\Output;
class CreateUser extends Command
{
protected function configure()
{
$this
// 命令的名字("think" 后面的部分)
->setName('app:create-user')
// 配置一个参数
->addArgument('name', //参数名
Argument::REQUIRED, //参数类型
'Do you like ThinkPHP') //参数描述
// 配置一个选项
->addOption(
'animals', //选项名
null,
Option::VALUE_REQUIRED | Option::VALUE_IS_ARRAY,//选项类型
'Which animals do you like?',//选项描述
array('cat', 'dog')
)
// 运行 "php think list" 时的简短描述
->setDescription('Creates new users.')
// 运行命令时使用 "--help" 选项时的完整命令描述
->setHelp("This command allows you to create users...");
}
protected function execute(Input $input, Output $output)
{
//命令实现部分
}
}
- 添加执行文路径件到command.php
return [
//命名空间\类名
'app\command\abutment\AbutSiteDb',
];
- 关键点解读
参数类型 说明
Argument::REQUIRED 参数必填。如果不提供,则命令不运
Argument::OPTIONAL 参数可选,因此可以忽略
Argument::IS_ARRAY 参数可以包含任意多个值。因此,它必须使用在参数列表中的最后一个
选项类型 说明
Option::VALUE_IS_ARRAY 此选项可接收多个值 eg:–dir=/foo --dir=/bar
Option::VALUE_NONE 此选项不接受输入的值 eg:–key
Option::VALUE_REQUIRED 此选项的值必填,但选项本身仍然是可选的 eg:–num=7
Option::VALUE_OPTIONAL 此选项的值可有可无 eg:–key 或 --key=value
二. php代码操作Xml文件
- 相关属性和方法
DOMDocument 属性:
Attributes存储节点的属性列表(只读)
childNodes存储节点的子节点列表(只读)
dataType返回此节点的数据类型
Definition以DTD或XML模式给出的节点的定义(只读)
Doctype 指定文档类型节点(只读)
documentElement返回文档的根元素(可读写)
firstChild返回当前节点的第一个子节点(只读)
Implementation返回XMLDOMImplementation对象
lastChild返回当前节点最后一个子节点(只读)
nextSibling返回当前节点的下一个兄弟节点(只读)
nodeName返回节点的名字(只读)
nodeType返回节点的类型(只读)
nodeTypedValue存储节点值(可读写)
nodeValue返回节点的文本(可读写)
ownerDocument返回包含此节点的根文档(只读)
parentNode返回父节点(只读)
Parsed 返回此节点及其子节点是否已经被解析(只读)
Prefix 返回名称空间前缀(只读)
preserveWhiteSpace指定是否保留空白(可读写)
previousSibling返回此节点的前一个兄弟节点(只读)
Text 返回此节点及其后代的文本内容(可读写)
url 返回最近载入的XML文档的URL(只读)
Xml 返回节点及其后代的XML表示(只读)
DOMDocument 方法:
appendChild为当前节点添加一个新的子节点,放在最后的子节点后
cloneNode返回当前节点的拷贝
createAttribute创建新的属性
createCDATASection创建包括给定数据的CDATA段
createComment创建一个注释节点
createDocumentFragment创建DocumentFragment对象
createElement_x创建一个元素节点
createEntityReference创建EntityReference对象
createNode创建给定类型,名字和命名空间的节点
createPorcessingInstruction创建操作指令节点
createTextNode创建包括给定数据的文本节点
getElementsByTagName返回指定名字的元素集合
hasChildNodes返回当前节点是否有子节点
insertBefore在指定节点前插入子节点
Load 导入指定位置的XML文档
loadXML 导入指定字符串的XML文档
removeChild从子结点列表中删除指定的子节点
replaceChild从子节点列表中替换指定的子节点
Save 把XML文件存到指定节点
selectNodes对节点进行指定的匹配,并返回匹配节点列表
selectSingleNode对节点进行指定的匹配,并返回第一个匹配节点
transformNode使用指定的样式表对节点及其后代进行转换
TbConfig.xml 操作demo
AbutSiteTb命令
<?php
namespace app\command\abutment;
use DOMDocument;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
class AbutSiteTb extends Command
{
protected function configure()
{
$this->setName('AbutSiteTb')
->setDescription(' set file TbConfig')
->addOption(
'create',
null,
Option::VALUE_NONE,
'create TbConfig xml'
)
->addOption(
'add',
null,
Option::VALUE_REQUIRED,
'add TbConfig xml Object',
''
)
->addOption(
'del',
null,
Option::VALUE_REQUIRED,
'delete TbConfig xml Object',
''
)
->addOption(
'sel',
null,
Option::VALUE_REQUIRED,
'select TbConfig xml Object',
''
)
->addOption(
'selAll',
null,
Option::VALUE_NONE,
'select All TbConfig xml Object'
);
}
protected function execute(Input $input, Output $output)
{ //create
if($input->hasOption('create')){
$this->createTbXml($input,$output);
}
//add
if($input->hasOption('add')){
$op = $input->getOption('add');
$this->addOject($input,$output,$op);
}
//delete
if($input->hasOption('del')){
$op = $input->getOption('del');
$this->deleteOject($input,$output,$op);
}
//selAll
if($input->hasOption('selAll')){
$this->selectOjectAll($input,$output);
}
//sel
if($input->hasOption('sel')){
$op = $input->getOption('sel');
$this->selectOject($input,$output,$op);
}
}
//--create功能实现函数
private function createTbXml(Input $input,Output $output){
$output->writeln('the value is create' );
//创建一个新的 DOM文档
$dom = new DomDocument();
//在根节点创建 abutDB标签
$abutTB = $dom->createElement('abutTB');
$dom->appendChild($abutTB);
//输出 XML数据
$output->writeln($dom->saveXML());
//将 XML数据写入文件
$fp = fopen('TbConfig.xml', 'w');
if(fwrite($fp, $dom->saveXML()))
$output->writeln('create TbConfig successful');
else
$output->writeln('create TbConfig error');
fclose($fp);
}
//--add功能实现函数
private function addOject(Input $input,Output $output, $value){
$output->writeln('the Object is '.$value);
//创建一个新的 DOM文档
$dom = new DomDocument();
$dom->load('TbConfig.xml'); //读取 XML数据
$rootDom = $dom->documentElement; //获取根节点
$addDom = $dom->getElementsByTagName($value); //获取将要添加的节点
if (count($addDom) === 0){
//在根标签下创建子标签
$obj = $dom->createElement($value);
$rootDom->appendChild($obj);
if($dom->save('TbConfig.xml'))
$output->writeln('add TbConfig successful');
else
$output->writeln('add TbConfig error');
}else{
$output->writeln($value.' alreadly exist');
}
}
//--del功能实现函数
private function deleteOject(Input $input,Output $output, $value){
$output->writeln('the Object is '.$value);
//创建一个新的 DOM文档
$dom = new DomDocument();
$dom->load('TbConfig.xml'); //读取 XML数据
$rootDom = $dom->documentElement; //获取根节点
$delDom = $rootDom->getElementsByTagName($value); //获取删除节点
if (count($delDom) > 0){
//在根标签下删除子节点
foreach($delDom as $d){
$rootDom->removeChild($d);
}
if($dom->save('TbConfig.xml'))
$output->writeln('del TbConfig object '.$value.' successful');
else
$output->writeln('del TbConfig object '.$value.'error');
}else{
$output->writeln($value.' not exist');
}
}
//--selAll功能实现函数
private function selectOjectAll(Input $input,Output $output){
//创建一个新的 DOM文档
$dom = new DomDocument();
$dom->load('TbConfig.xml'); //读取 XML数据
$rootDom = $dom->documentElement; //获取根节点
if (count($rootDom->childNodes) > 0){
foreach ($rootDom->childNodes as $d){
$output->writeln($d->tagName);
}
}else{
$output->writeln(' no childNodes');
}
}
//--sel功能实现函数
private function selectOject(Input $input,Output $output, $value){
//创建一个新的 DOM文档
$dom = new DomDocument();
$dom->load('TbConfig.xml'); //读取 XML数据
$showDon = $dom ->getElementsByTagName($value);
foreach ($showDon as $d){
$output->writeln(dump($d));
}
}
}
AbutSiteTbItem命令
<?php
namespace app\command\abutment;
use DOMDocument;
use think\console\Command;
use think\console\Input;
use think\console\input\Option;
use think\console\Output;
class AbutSiteTbItem extends Command
{
protected function configure()
{
$this->setName('AbutSiteTbItem')
->setDescription(' set file TbConfig Item')
->addOption(
'pItem',
null,
Option::VALUE_REQUIRED,
'the item will change',
''
)
->addOption(
'itemValue',
null,
Option::VALUE_REQUIRED,
'the item will change',
''
)
->addOption(
'addItem',
null,
Option::VALUE_REQUIRED,
'add TbConfig xml Object Item',
''
)
->addOption(
'delItem',
null,
Option::VALUE_REQUIRED,
'delete TbConfig xml Object Item',
''
)
->addOption(
'selItem',
null,
Option::VALUE_REQUIRED,
'select TbConfig xml Object Item',
''
)
->addOption(
'cv',
null,
Option::VALUE_REQUIRED,
'change TbConfig xml Object Item value',
''
);
}
protected function execute(Input $input, Output $output)
{
//add
if($input->hasOption('pItem') && $input->hasOption('addItem') && $input->hasOption('itemValue')){
$item = $input->getOption('pItem');
$op = $input->getOption('addItem');
$value = $input->getOption('itemValue');
$this->addItem($input,$output,$item,$op,$value);
}
//sel
if($input->hasOption('selItem')){
$value = $input->getOption('selItem');
$this->selItem($input,$output,$value);
}
//del
if($input->hasOption('pItem') && $input->hasOption('delItem')){
$item = $input->getOption('pItem');
$op = $input->getOption('delItem');
$this->delItem($input,$output,$item,$op);
}
//cv
if($input->hasOption('pItem') && $input->hasOption('cv') && $input->hasOption('itemValue')){
$item = $input->getOption('pItem');
$op = $input->getOption('cv');
$value = $input->getOption('itemValue');
$this->cvItemValue($input,$output,$item,$op, $value);
}
}
//--addItem功能实现函数
private function addItem(Input $input,Output $output, $item, $op, $value){
//创建一个新的 DOM文档
$dom = new DomDocument();
$dom->load('TbConfig.xml'); //读取 XML数据
$rootDom = $dom->documentElement; //获取根节点
$parentDon = $rootDom ->getElementsByTagName($item)->item(0);
if ($parentDon ){
//属性存在性检测
foreach ($parentDon->childNodes as $p){
if ($p->tagName == $op){
$output->writeln( $op." exist in ".$item );
exit();
}
}
//属性添加
$obj = $dom->createElement($op);
$obj_value = $dom->createTextNode($value);
$obj->appendChild($obj_value);
$status = $parentDon->appendChild($obj);
if ($status){
if($dom->save('TbConfig.xml'))
$output->writeln('add TbConfig Objiect item successful');
else
$output->writeln('add TbConfig Objiect item error');
}else{
$output->writeln( ' add error');
}
}else{
$output->writeln( $item." node is not exist " );
}
}
//--selitem功能实现函数
private function selItem(Input $input,Output $output, $value){
//创建一个新的 DOM文档
$dom = new DomDocument();
$dom->load('TbConfig.xml'); //读取 XML数据
$rootDom = $dom->documentElement; //获取根节点
$parentDon = $rootDom ->getElementsByTagName($value)->item(0);
//将结果数组化
if ($parentDon){
$res = [];
foreach ($parentDon->childNodes as $p){
$res[$p->nodeName] = $p->nodeValue;
}
$output->writeln(dump($res));
}else{
$output->writeln( $value." node is not exist " );
}
}
//--delitem功能实现函数
private function delItem(Input $input,Output $output, $item, $op){
//创建一个新的 DOM文档
$dom = new DomDocument();
$dom->load('TbConfig.xml'); //读取 XML数据
$rootDom = $dom->documentElement; //获取根节点
$delDon = $rootDom ->getElementsByTagName($op);
$delParentDom = $rootDom ->getElementsByTagName($item)->item(0);
if (count($delDon) > 0 ){
$status = 0;
$have = 0;
foreach ($delDon as $v){
$parentDom=$v->parentNode;
if ($parentDom->nodeName == $item){
$have = 1;
$status = $delParentDom->removeChild($v);
}
}
if (!$have){
$output->writeln('The '.$item.' is not include '.$op.' .');
exit();
}
if ($status){
if($dom->save('TbConfig.xml'))
$output->writeln('from '.$item.' delete '.$op.' item successful');
else
$output->writeln('from '.$item.' delete '.$op.' item error');
}
}else{
$output->writeln( $op." node is not exist " );
}
}
//--cv功能实现函数
private function cvItemValue(Input $input,Output $output, $item, $op , $value){
//创建一个新的 DOM文档
$dom = new DomDocument();
$dom->load('TbConfig.xml'); //读取 XML数据
$rootDom = $dom->documentElement; //获取根节点
$cvDon = $rootDom ->getElementsByTagName($op);
if (count($cvDon) > 0 ){
$have = 0;
foreach ($cvDon as $v){
$parentDom=$v->parentNode;
if ($parentDom->nodeName == $item){
$have = 1;
$v->nodeValue = $value;
}
}
if (!$have){
$output->writeln('The '.$item.' is not include '.$op.' .');
exit();
}
if($dom->save('TbConfig.xml'))
$output->writeln('from '.$item.' change '.$op.' item successful');
else
$output->writeln('from '.$item.' change '.$op.' item error');
}else{
$output->writeln( $op." node is not exist " );
}
}
}
本文详细介绍使用TP5框架执行命令行代码创建用户,并通过PHP操作XML文件,涵盖DOMDocument属性与方法,演示如何创建、添加、删除及选择XML节点。
1181

被折叠的 条评论
为什么被折叠?



