XTML
GSON analog for serialization/deserialization of Java objects into HTML code and back
Install / Use
/learn @metalurgus/XTMLREADME
XTML
GSON analog for serialization/deserialization of Java objects into HTML code and back
Work in progress, a basic data is supported so far.
For the sample see TestClass.java
Contribution is welcome!
How to use?
Add dependency (XTML is available through jitpack.io):
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
implementation 'com.github.metalurgus:XTML:0.0.6'
}
Sample HTML to deserialize:
"<div test1 = '111'>" +
"<div id='testId' test2='222'/>" +
"<div test2='333'/>" +
"<div id='testId2'>" +
"<div test2='333'/>" +
"<div test2='333'/>" +
"<div test2='333'/>" +
"</div>" +
"<div id='testId3'>" +
"<div test2='333'>222.22</div>" +
"<div test2='333'>333.33</div>" +
"<div test2='333'>444.44</div>" +
"</div>" +
"</div>";
Annotate your model class with @XTMLClass annotation:
@XTMLClass
public class TestClass {
...
}
Annotate every field to be deserialized with @XTMLMapping annotation:
@XTMLMapping(type = XTMLMapping.Type.ATTRIBUTE, name = "test1")
public int field1;
//Non-siple data types are supported as well.
@XTMLMapping(type = XTMLMapping.Type.TAG, select = "#testId")
public InnerTestClass innerTestClass1;
@XTMLMapping(type = XTMLMapping.Type.TAG, index = 1)
public InnerTestClass innerTestClass2;
//as well as collections
@XTMLMapping(type = XTMLMapping.Type.COLLECTION, select = "#testId2 > *")
public List<InnerTestClass> innerTestClassList;
@XTMLMapping(type = XTMLMapping.Type.COLLECTION, select = "#testId3 > *")
public List<Double> integerList;
@XTMLClass
class InnerTestClass {
@XTMLMapping(type = XTMLMapping.Type.ATTRIBUTE, name = "test2")
public String field3;
}
Call XTML.fromHTML():
TestClass testClass = XTML.fromHTML(Jsoup.parse(TestClass.HTML).body().child(0), TestClass.class);
type attribute:
@XTMLMapping.Type.ATTRIBUTE will pick an attribute lavue into the annitated field
@XTMLMapping.Type.TAG will parse an HTML tag into annotated field, doing it recursively, if field class is annotated with @XTMLClass, and trying to assign the attribute text to the field if not annotated.
@XTMLMapping.Type.COLLECTION will parse a list of elements, provided with a select attribute.
name attribute - specifies HTML attribute name to be parsed with @XTMLMapping.Type.ATTRIBUTE annotation, or an element with specified name(<div name='someName'/>)
id attribute - specifies id of an element to be parsed into the annotated field
index attribute - specifies an index of the element inside a list, provided by select attribute, or an index of a child element to be parsed into an annotated field
select attribute - a CSS selector to select a list of nodes for collection, or a single node (using index, or picking `st element) for parsing.
Related Skills
node-connect
339.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.8kCommit, push, and open a PR
