一. tp5实现行代码
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)
{
//命令实现部分
}
}
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文件
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命令
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命令
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 " );
}
}
}