open fun a(href: String, action: A.() -> Unit) {
val newA = A()
newA.href = href
newA.action()
elements += newA
}
}
// h1 中转站
private class H1 : Body(“h1”) {
}
// P 中转站
private class P : Body(“p”) {
fun b(action: B.() -> Unit) {
val newB = B()
newB.action()
elements += newB
}
override fun a(href: String, action: A.() -> Unit) {
val newA = A()
newA.href = href
newA.action()
elements += newA
}
fun ul(action: Ul.() -> Unit) {
val newUl = Ul()
newUl.action()
elements += newUl
}
}
// A 中转站
private class A : Body(“a”) {
var href: String
get() = attribute[“href”]!!
set(value) {
attribute[“href”] = value
}
}
// P 中转站
private class B : Body(“b”) {
}
// Ul 中转站
private class Ul : Body(“ul”) {
fun li(action: Li.() -> Unit) {
val newLi = Li()
newLi.action()
elements.add(newLi)
}
}
// Li 中转站
private class Li : Body(“li”) {}
// Title 中转站
private class Title : TagClass(“title”) {
}
private fun html(action: Html.() -> Unit): Html {
val html = Html()
html.action()
return html
}
fun main(args: Array) {
val names = listOf(“张三”, “大漂亮”, “王美丽”)
val result =
html { // this == 第一个中转站 { head body 。。 }
head { // this == head中转站 { title }
title { +“使用 Kotlin 进行 HTML 编码” }
}
body { // this == body中转站 { h1 p a p }
h1 { // this == h1中转站 { 未知 }
}
p { -“此格式可用作 HTML 的替代标记” }
// 具有属性和文本内容的元素
a(href = “https://blog.csdn.net/u010755471”) { -“不爱学习的猪的博客” }
// 混合内容
p {
-“Derry老师来了”
b { -“Derry是谁” }
-“文本。有关更多信息,请参阅”
a(href = “https://blog.csdn.net/u010755471”) { -“不爱学习的猪的博客” }
-“Derry的项目”
}
p { -“一些文字” }
// 从命令行参数生成的内容
p {
-“命令行参数是:”
ul { // this == UL中转站 { li 子标签 }
for (name in names)
li { -name } // this == LI中转站
}
}
}
}
println(result)
val file = File(“/Users/Documents/Android leaning work/kotlinleaning04/testHtml.html”)
file.writeText(result.toString())
}
二、使用 DSL 解析HTML
=============================================================================
先来张图
源码如下:
import java.io.File
// 定义一个节点接口
interface Node {
fun create(): String
}
// 中转站
class BlockNode(val name: String) : Node {
val children = ArrayList() // 节点集合: html head body
private val properties = hashMapOf<String, Any>() //属性集合:style=‘color: white; font-family: Microsoft YaHei’
override fun create(): String {
return “”“<$name KaTeX parse error: Expected '}', got 'EOF' at end of input: …perties.map { "{it.key}='KaTeX parse error: Expected 'EOF', got '}' at position 14: {it.value}'" }̲.joinToString("…{children.joinToString ( “” ){it.create()}}</$name”“”
}
operator fun String.invoke(action: BlockNode.() -> Unit){
val stringNode = BlockNode(this)
stringNode.action()
this@BlockNode.children += stringNode
}
operator fun String.invoke(value: Any){
this@BlockNode.properties[this] = value
}
operator fun String.unaryPlus(){
val stringNode = StringNode(“$this &sbsp; &sbsp;”)
this@BlockNode.children += stringNode
}
}
class StringNode(private val value: String) : Node {
override fun create(): String {
return value
}
}
fun html(action: BlockNode.() -> Unit): BlockNode {
val blockNode = BlockNode(“html”)
blockNode.action()
return blockNode
}
fun BlockNode.head(action: BlockNode.() -> Unit) {
val head = BlockNode(“head”)
head.action()
children += head
}
fun BlockNode.body(action: BlockNode.() -> Unit) {
val body = BlockNode(“body”)
body.action()
children += body
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
最后
目前已经更新的部分资料:
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
讲义、实战项目、讲解视频,并且后续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-oIKYdOO0-1712591572467)]
最后
目前已经更新的部分资料:
[外链图片转存中…(img-V93vOwBi-1712591572467)]
[外链图片转存中…(img-MpagfXLH-1712591572467)]
[外链图片转存中…(img-gwvuQFwD-1712591572467)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-n2qZUzv5-1712591572468)]