💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
表示整个HTML或XML文档; 充当文档树的根 ``` DOMDocument extends DOMNode { /* 属性 */ //不推荐使用。 文档的实际编码,等同于编码的只读。 public readonly string $actualEncoding ; //不推荐使用。 调用DOMDocument :: normalizeDocument()时使用的配置。 public readonly DOMConfiguration $config ; //不推荐使用。 XML的版本,对应于xmlVersion。 public string $version ; //与此文档关联的文档类型声明。 public readonly DOMDocumentType $doctype ; //这是一个方便属性,它允许直接访问作为文档的文档元素的子节点。 public readonly DOMElement $documentElement ; //文档的位置;如果未定义,则为NULL。 public string $documentURI ; //XML声明指定的文档编码。 该属性在最终的DOM Level 3规范中不存在,但是是在此实现中操纵XML文档编码的唯一方法。 public string $encoding ; //用缩进和额外的空间很好地格式化输出。 public bool $formatOutput ; //处理此文档的DOMImplementation对象。 public readonly DOMImplementation $implementation ; //不要删除多余的空格。 默认为TRUE。 public bool $preserveWhiteSpace = TRUE ; //所有权。 启用恢复模式,即尝试解析格式不正确的文档。 此属性不是DOM规范的一部分,并且特定于libxml。 public bool $recover ; //将其设置为TRUE可从doctype声明中加载外部实体。 这对于在XML文档中包含字符实体很有用。 public bool $resolveExternals ; //不推荐使用。 XML声明指定的文档是否独立,对应于xmlStandalone。 public bool $standalone ; //抛出DOMException错误。 默认为TRUE。 public bool $strictErrorChecking = TRUE ; //所有权。 是否替换实体。 此属性不是DOM规范的一部分,并且特定于libxml。 public bool $substituteEntities ; //根据DTD加载并验证。 默认为FALSE。 public bool $validateOnParse = FALSE ; //一个属性,指定此文档的编码作为XML声明的一部分。 如果未指定或未知(例如在内存中创建Document时),则为NULL。 public readonly string $xmlEncoding ; //作为XML声明的一部分,指定此文档是否独立的属性。 未指定时为FALSE。 public bool $xmlStandalone ; //作为XML声明的一部分,指定此文档的版本号的属性。 如果没有声明,并且此文档支持"XML"功能,则值为"1.0". public string $xmlVersion ; /* 方法 */ //创建一个新的DOMDocument对象 public __construct ([ string $version [, string $encoding ]] ) //创建新属性 public createAttribute ( string $name ) : DOMAttr //创建具有关联名称空间的新属性节点 public createAttributeNS ( string $namespaceURI , string $qualifiedName ) : DOMAttr //创建新的cdata节点 public createCDATASection ( string $data ) : DOMCDATASection //创建新的注释节点 public createComment ( string $data ) : DOMComment //创建新的文档片段 public createDocumentFragment ( void ) : DOMDocumentFragment //创建新元素节点 public createElement ( string $name [, string $value ] ) : DOMElement //创建具有关联名称空间的新元素节点 public createElementNS ( string $namespaceURI , string $qualifiedName [, string $value ] ) : DOMElement //创建新的实体引用节点 public createEntityReference ( string $name ) : DOMEntityReference //创建新的PI节点 public createProcessingInstruction ( string $target [, string $data ] ) : DOMProcessingInstruction //创建新的文本节点 public createTextNode ( string $content ) : DOMText //搜索具有特定ID的元素 public getElementById ( string $elementId ) : DOMElement //搜索具有给定本地标签名称的所有元素 public getElementsByTagName ( string $name ) : DOMNodeList //在指定的名称空间中搜索具有给定标签名称的所有元素 public getElementsByTagNameNS ( string $namespaceURI , string $localName ) : DOMNodeList //将节点导入当前文档 public importNode ( DOMNode $importedNode [, bool $deep = FALSE ] ) : DOMNode //从文件加载XML public load ( string $filename [, int $options = 0 ] ) : mixed //从字符串加载XML public loadXML ( string $source [, int $options = 0 ] ) : mixed //从字符串加载HTML public loadHTML ( string $source [, int $options = 0 ] ) : bool //从文件加载HTML public loadHTMLFile ( string $filename [, int $options = 0 ] ) : bool //规范化文件 public normalizeDocument ( void ) : void //注册用于创建基本节点类型的扩展类 public registerNodeClass ( string $baseclass , string $extendedclass ) : bool //在文档上执行RelaxNG验证 public relaxNGValidate ( string $filename ) : bool //在文档上执行RelaxNG验证 public relaxNGValidateSource ( string $source ) : bool //将内部XML树转储回文件 public save ( string $filename [, int $options = 0 ] ) : int //将内部XML树转储回字符串 public saveXML ([ DOMNode $node [, int $options = 0 ]] ) : string //使用HTML格式将内部文档转储为字符串 public saveHTML ([ DOMNode $node = NULL ] ) : string //使用HTML格式将内部文档转储到文件中 public saveHTMLFile ( string $filename ) : int //根据架构验证文档 public schemaValidate ( string $filename [, int $flags = 0 ] ) : bool //根据架构验证文档 public schemaValidateSource ( string $source [, int $flags ] ) : bool //根据其DTD验证文档 public validate ( void ) : bool //替换DOMDocument对象中的XIncludes public xinclude ([ int $options = 0 ] ) : int } ``` ## **__construct** 创建一个新的DOMDocument对象 ## **saveXML** 将树结构的DOMDocument对象转成xml结构的字符串 ``` $doc = new \DOMDocument('1.0','UTF-8'); $xml=$doc->saveXML(); echo $xml; ``` 输出: ``` <?xml version="1.0" encoding="UTF-8"?> ``` ## **saveHTML** 将树结构的DOMDocument对象转成html结构的字符串 ``` //创建文档根节点 $docNode = new \DOMDocument('1.0','UTF-8'); //此例针对html而不是xml,所以示例参数可以省略 $docNode = new \DOMDocument; //创建div节点 $divNode=$docNode->createElement("div"); //将div节点追加到文档根节点 父类DOMNode的方法 $docNode->appendChild($divNode); //创建span节点 $spanNode=$docNode->createElement("span"); //将span节点追加到div节点中 返回DOMNode对象 $divNode->appendChild($spanNode); //创建span的文本节点 $textNode=$docNode->createTextNode("你好!塞北的雪"); //将文本节点追加到span节点中 $spanNode->appendChild($textNode); //创建id属性节点 返回DOMAttr对象 $idNode=$docNode->createAttribute("id"); //将id属性节点追加到span节点 $spanNode->appendChild($idNode); //创建用于id属性值的文本节点 $textNode_ID=$docNode->createTextNode("show-color"); //将id属性值文本节点追加到id属性节点 $idNode->appendChild($textNode_ID); $html=$docNode->saveHTML(); echo $html; ``` 输出: ``` <div><span id="show-color">你好!塞北的雪</span></div> ``` ## **createElement** 参看saveHTML方法的示例 ## **createTextNode** 参看saveHTML方法的示例 ## **createAttribute** 参看saveHTML方法的示例 ``` //创建文档根节点 $docNode = new \DOMDocument('1.0','UTF-8'); //创建注释节点 $comment=$docNode->createComment("comment"); //将注释节点追加到文档根节点 $docNode->appendChild($comment); //创建button节点 $buttonNode = $docNode->createElement("button"); //将button节点追加到文档根节点(其实这个才算是严格意义上的根节点,了解就好) $docNode->appendChild($buttonNode); //创建name节点 $nameNode = $docNode->createElement("name"); //将name节点追加到button节点 $buttonNode->appendChild($nameNode); //创建CDATA节点 $textNode = $docNode->createCDATASection('扫码'); //将创建的CDATA节点追加到name节点 $nameNode->appendChild($textNode); //创建sub_button节点 $sub_buttonNode = $docNode->createElement("sub_button"); //将sub_button节点追加到button节点 $buttonNode->appendChild($sub_buttonNode); //创建type节点 $typeNode = $docNode->createElement("type"); //将type节点追加到sub_button节点 $sub_buttonNode->appendChild($typeNode); //创建CDATA节点 $type_textNode = $docNode->createCDATASection('scancode_waitmsg'); //将创建的CDATA节点追加到name节点 $typeNode->appendChild($type_textNode); //创建key节点 $keyNode = $docNode->createElement("key"); //将key节点追加到sub_button节点 $sub_buttonNode->appendChild($keyNode); //创建CDATA节点 $key_textNode = $docNode->createCDATASection('rselfmenu_0_0'); //将创建的CDATA节点追加到name节点 $keyNode->appendChild($key_textNode); //创建sub_button的name节点(测试不能用复用上面的name节点) $sb_nameNode = $docNode->createElement("name"); //追加sub_button的name节点到sub_button节点 $sub_buttonNode->appendChild($sb_nameNode); //创建CDATA节点 $sub_button_name_textNode = $docNode->createCDATASection('扫码带提示'); //将创建的CDATA节点追加到name节点 $sb_nameNode->appendChild($sub_button_name_textNode); $xml=$docNode->saveXML(); echo $xml; ``` 输出 ``` <?xml version="1.0" encoding="UTF-8"?> <!--comment--> <button> <name><![CDATA[扫码]]></name> <sub_button> <type><![CDATA[scancode_waitmsg]]></type> <key><![CDATA[rselfmenu_0_0]]></key> <name><![CDATA[扫码带提示]]></name> </sub_button> </button> ``` 这里只是举个例子xml解析成数组必定是关联数组,没法处理索引数组而微信的菜单json转成数组后必定是含有索引数组