wordpress 多域名301重定向代码,seo内部优化具体做什么,博客园 wordpress,物联网设计竞赛一、DOMParser
DOMParser 可以将存储在字符串中的 XML 或 HTML 源代码解析为一个 DOM Document。
备注#xff1a; XMLHttpRequest 支持从 URL 可寻址资源解析 XML 和 HTML#xff0c;在其response 属性中返回Document。
你可以使用XMLSerializer 接口执行相反的操作 - 将…一、DOMParser
DOMParser 可以将存储在字符串中的 XML 或 HTML 源代码解析为一个 DOM Document。
备注 XMLHttpRequest 支持从 URL 可寻址资源解析 XML 和 HTML在其response 属性中返回Document。
你可以使用XMLSerializer 接口执行相反的操作 - 将 DOM 树转换为 XML 或 HTML 源。
对于 HTML 文档你还可以通过设置 Element.innerHTML 和outerHTML 属性的值将部分 DOM 替换为从 HTML 构建的新 DOM 树。还可以读取这些属性以获取对应于相应 DOM 子树的 HTML 片段。
更多参考DOMParser - Web API | MDN (mozilla.org)
二、DOMParser接口c定义
1、dom_parser.idl定义
third_party\blink\renderer\core\xml\dom_parser.idl
// https://w3c.github.io/DOM-Parsing/#the-domparser-interfaceenum SupportedType {text/html,text/xml,application/xml,application/xhtmlxml,image/svgxml
};[ExposedWindow
] interface DOMParser {[CallWithScriptState] constructor();[NewObject] Document parseFromString(HTMLString str, SupportedType type, optional ParseFromStringOptions options {});
};注意parseFromString返回的是document
例子:
let parser new DOMParser();
let doc parser.parseFromString(stringContainingXMLSource, application/xml);
// 返回一个 Document 对象但不是 SVGDocument也不是 HTMLDocumentparser new DOMParser();
doc parser.parseFromString(stringContainingXMLSource, image/svgxml);
// 返回一个 SVGDocument 对象同时也是一个 Document 对象。parser new DOMParser();
doc parser.parseFromString(stringContainingHTMLSource, text/html);
// 返回一个 HTMLDocument 对象同时也是一个 Document 对象。 支持的类型如下 text/html, text/xml, application/xml, application/xhtmlxml, image/svgxml 2、dom_parser.idl接口实现blink third_party\blink\renderer\core\xml\dom_parser.h third_party\blink\renderer\core\xml\dom_parser.cc
namespace blink {class Document;
class ParseFromStringOptions;
class LocalDOMWindow;
class ScriptState;class CORE_EXPORT DOMParser final : public ScriptWrappable {DEFINE_WRAPPERTYPEINFO();public:static DOMParser* Create(ScriptState* script_state) {return MakeGarbageCollectedDOMParser(script_state);}explicit DOMParser(ScriptState*);Document* parseFromString(const String,const String type,const ParseFromStringOptions* options);void Trace(Visitor*) const override;LocalDOMWindow* GetWindow() const { return window_.Get(); }private:WeakMemberLocalDOMWindow window_;
};} // namespace blink 3、dom_parser.idl接口实现v8 out\Debug\gen\third_party\blink\renderer\bindings\core\v8\v8_dom_parser.h out\Debug\gen\third_party\blink\renderer\bindings\core\v8\v8_dom_parser.cc void ParseFromStringOperationCallback(const v8::FunctionCallbackInfov8::Value info) {RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), Blink_DOMParser_parseFromString);
BLINK_BINDINGS_TRACE_EVENT(DOMParser.parseFromString);v8::Isolate* isolate info.GetIsolate();
const ExceptionContextType exception_context_type ExceptionContextType::kOperationInvoke;
const char* const class_like_name DOMParser;
const char* const property_name parseFromString;
ExceptionState exception_state(isolate, exception_context_type, class_like_name, property_name);
if (UNLIKELY(info.Length() 2)) {exception_state.ThrowTypeError(ExceptionMessages::NotEnoughArguments(2, info.Length()));
return;
}v8::Localv8::Object v8_receiver info.This();
DOMParser* blink_receiver V8DOMParser::ToWrappableUnsafe(isolate, v8_receiver);
ExecutionContext* execution_context_of_document_tree bindings::ExecutionContextFromV8Wrappable(blink_receiver);
auto arg1_str NativeValueTraitsIDLStringStringContextTrustedHTML::ArgumentValue(isolate, 0, info[0], exception_state, execution_context_of_document_tree);
if (UNLIKELY(exception_state.HadException())) {return;
}
auto arg2_type NativeValueTraitsV8SupportedType::ArgumentValue(isolate, 1, info[1], exception_state);
if (UNLIKELY(exception_state.HadException())) {return;
}
decltype(NativeValueTraitsParseFromStringOptions::NativeValue(std::declvalv8::Isolate*(), std::declvalv8::Localv8::Value(), std::declvalExceptionState())) arg3_options;
if (info[2]-IsUndefined()) {arg3_options ParseFromStringOptions::Create();
} else {arg3_options NativeValueTraitsParseFromStringOptions::ArgumentValue(isolate, 2, info[2], exception_state);
if (UNLIKELY(exception_state.HadException())) {return;
}
}
auto return_value blink_receiver-parseFromString(arg1_str, arg2_type, arg3_options);
bindings::V8SetReturnValue(info, return_value, blink_receiver);
}
三、更多xml解析具体实现参考 third_party\blink\renderer\core\xml\文件夹下