gpt4 book ai didi

java - 解析未知的 XML 派生文件

转载 作者:行者123 更新时间:2023-12-02 01:05:36 26 4
gpt4 key购买 nike

我发现一个包含 xml 类似结构的文件。我不知道它是什么,但我需要解析它。

看起来像这样:

<:openingtag>
<:openingtag2>
<:openingtag3>
text
</>
</>
</>

有人知道如何解析它吗? Groovy/Java/Python 都可以很好地实现解析器。

最佳答案

使用 petit 的简单解析器- 但当然还有很多内容需要涵盖,因为语法未知。

@Grab("com.github.petitparser:petitparser-core:2.2.0")
import org.petitparser.tools.GrammarDefinition
import org.petitparser.tools.GrammarParser
import org.petitparser.parser.primitive.CharacterParser as CP
import org.petitparser.parser.primitive.StringParser as SP
import org.petitparser.utils.Functions as F

class FakeMLGrammerDefinition extends GrammarDefinition {
FakeMLGrammerDefinition() {
define("start",
ref("tag").trim())
define("tag",
ref("tag-start")
.seq(ref("tag").star())
.seq(ref("text").optional())
.seq(ref("tag").star())
.seq(ref("tag-end")))
define("tag-start",
SP.of('<:')
.seq(ref("keyword"))
.seq(SP.of(">"))
.trim())
define("tag-end",
SP.of("</>")
.trim())
define("text",
CP.pattern("^<").star().flatten().trim())
define("keyword",
CP.letter()
.seq(CP.pattern("^>").plus())
.star()
.flatten())
}

/** Helper for `def`, which is a keyword in groovy */
void define(s, p) { super.def(s,p) }
}

class FakeMLParserDefinition extends FakeMLGrammerDefinition {
FakeMLParserDefinition() {
action("tag", { tag, c1, t, c2, _ ->
[(tag): [children: c1+c2, text: t]]
})
action("tag-start", { it[1] })
}
}

class FakeMLParser extends GrammarParser {
FakeMLParser() {
super(new FakeMLParserDefinition())
}
}

println(new FakeMLParser().parse("""
<:openingtag>
<:openingtag2>
<:openingtag3>
text
</>
</>
</>
"""))
// Success[9:1]: {openingtag={children=[{openingtag2={children=[{openingtag3={children=[], text=text}}], text=}}], text=}}

关于java - 解析未知的 XML 派生文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60089763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com