XMLParserの概要
XMLParserは、注釈を使用してXMLファイル内のタグを生成および解析するAndroidXMLファイル解析および生成ツールです。
gradleを使用してインポート
implementation "lee.hua.xmlparse:xmlparse:2.4.3"
使いやすい
シナリオ:本の情報の説明本には、本のタイトル、ページ数、価格、作者、発行者などの情報が含まれています。次のように、JAVAオブジェクトを使用して簡単に表現します。
@XmlBean(name = "BookNode")//XMLParser类注解,表示此类是一个XML标签,name表示输出的标签名
public class Book {
@XmlAttribute
private String name;//书名
@XmlAttribute
private Integer page;//页数
@XmlAttribute
private Float price;//价格
@XmlSingleNode(name = "Publisher",nodeType = Publisher.class)//XMLParser属性注解,表示一个子标签
private Publisher publishier;//出版商
@XmlListNode(name = "Author",nodeType = Author.class)//XMLParser属性注解,表示多个子标签
private List<Author> authors;//作者,多个
//省略无参构造 getter setter 和 toString 方法
}
@XmlBean(name = "Author")
public class Author {
@XmlAttribute
private String name;//作者名
//省略无参构造 getter setter 和 toString 方法
}
@XmlBean(name = "Publisher")
public class Publisher {
@XmlAttribute(name = "PUB") //XMLParser属性注解,name表示输出的属性名
private String pub;//出版社名称
//省略无参构造 getter setter 和 toString 方法
}
オブジェクトを定義した後、XMLParserを使用して出力および解析できます。
生成されたXMLコードは次のとおりです。
//生成XML文件
public void generate(){
//生成book数据
Book book = new Book();
book.setName("XMLParser解析");
book.setPage(55);
book.setPrice(37.5f);
book.setPublishier(new Publisher("中国花花出版社"));
List<Author> authors = new ArrayList<>();
for (int i = 0; i < 4; i++) {
Author author = new Author("author0"+i);
authors.add(author);
}
book.setAuthors(authors);
//设置注解扫描路径
XMLAPI.setXmlBeanScanPackage("com.lee");
//输出book对象
XMLAPI.writeObj2Xml(book,"/Users/lijie/Desktop/test.xml");
}
結果:
text.xml
<?xml version="1.0" encoding="UTF-8"?>
<BookNode name="XMLParser解析" page="55" price="37.5">
<Publisher PUB="中国花花出版社"/>
<Author name="author00"/>
<Author name="author01"/>
<Author name="author02"/>
<Author name="author03"/>
</BookNode>
XMLファイルを解析するには、出力されたtest.xmlファイルを解析オブジェクトとして使用します。コードは次のとおりです。
public void readXML(){
//设置注解扫描路径
XMLAPI.setXmlBeanScanPackage("com.lee");
//调用readXML读取文件,并强转为Book对象
Book book = (Book) XMLAPI.readXML(new FileInputStream("/Users/lijie/Desktop/test.xml"));
//打印
System.out.println(book);
}
結果の印刷:
Book{
name='XMLParser解析', page=55, price=37.5,
publishier=Publisher{pub='中国花花出版社'},
Author{name='author00'},
Author{name='author01'},
Author{name='author02'},
Author{name='author03'}]
}
XMLParserの詳細な使用
まず、使用時に使用する注釈タグを紹介します
ラベル名 | 注釈オブジェクト | 効果 | 属性 |
---|---|---|---|
@XmlBean |
JAVAクラス | XMLタグを表します | name:操作するXMLタグの名前 |
@XmlAttribute |
JAVAクラスメンバーの基本的なデータタイプと文字列属性 | XMLタグの属性を表します | name:操作するラベルの属性名 |
@XmlListNode |
JAVAクラスコレクションメンバーの属性 | 複数の同一のサブタグのコレクションを表します | name:ノードで操作されるサブタグの名前type:サブタグに対応するJAVAクラス |
@XmlSingleNode |
JAVAクラスメンバーオブジェクトのプロパティ | 単一のサブタグを表します | name:ノードで操作されるサブタグの名前type:サブタグに対応するJAVAクラス |
@Ignore |
JAVAクラスのメンバー属性 | この属性を無視し、解析および生成しないことを示します | 番号 |
モデリング
上記の注釈タグを導入した後、実際の戦闘を開始しましょう。
まず、ルートノードがユーザーであるXMLファイルを作成します。
<User name="test" age="18" marry="true" married="true">
<Books>
<Book name="java"/>
<Book name="android"/>
</Books>
<Phone number="110110110" type="home"/>
<Phone number="221221221" type="company"/>
</User>
XML構造に従って、対応するJAVAオブジェクトの関係を構築できます。
/**
* 根据XML文件解析得来最外层User标签
*/
@XmlBean//标记为XML标签
public class User {
@XmlAttribute//标记为标签属性
private String name;
@XmlAttribute//标记为标签属性
private int age;
@XmlAttribute//标记为标签属性
private boolean marry;
@Ignore//忽略的标签属性
private boolean married = false;
@XmlSingleNode(name = "Books", nodeType = Books.class)//单个子节点 name=节点名字,nodeType=节点对应的JAVA类对象
private Books books;
@XmlListNode(name = "Phone", nodeType = Phone.class)//多个子节点
private List<Phone> phones;
//getter 和 setter
}
@XmlBean
public class Books {
@XmlListNode(name = "Book",nodeType = Book.class)
private List<Book> books;
//getter 和 setter
}
@XmlBean
public class Book {
@XmlAttribute
private String name;
//getter 和 setter
}
@XmlBean
public class Phone {
@XmlAttribute(name = "number")//解析属性为number的标签属性
private String phoneNum;
@XmlAttribute
private String type;
//getter 和 setter
}
XMLファイルを読む
モデルが構築された後、XMLParserには、XMLAPI
XML解析によって生成されたすべての操作を提供するクラスがあります。非常に単純です。コードを直接見てください。
@Test
public void testXML(){
//设置标签类(之前定义的User、Books等)的包路径
XMLAPI.changPackageName("lee.hua.databinding.xml_parse");
//调用对应的 ClassLoader,某些特殊情况下不设置会找不到对应的class
XMLAPI.setClassLoader(context.getClassLoader());
//调用XMLAPI.readXML()读取指定路径的XML文件
User userBean = (User) XMLAPI.readXML("/Users/lijie/Desktop/f.xml");
//打印user对象信息
System.out.println("XMLParser====="+ userBean);
}
出力:
XMLParser=====UserBean{name='test', age=18, marry=true, married=false,
books=Books{books=[Book{name='java'}, Book{name='android'}]},
phones=[Phone{phoneNum='110110110', type='home'},
Phone{phoneNum='221221221', type='company'}]}
分析:
IgnoreとXmlAttributeの解析効果が出ており、marriedのユーザー属性は解析を無視し、PhoneのphoneNum属性も正常に割り当てられていることがわかります。
XMLファイルを生成する
XMLの生成は比較的単純で、呼び出す必要があるだけXMLAPI.writeObj2Xml(Object object,String ouputPath)
です。もちろん、前提は次のとおりです。事前にXmlBeanオブジェクトを定義します。
上記のコード:
@Test
public void testXML(){
//读取f.xml文件,文件内容就是上面定义的User
XMLAPI.changPackageName("lee.hua.databinding.xml_parse");
File file = new File("/Users/lijie/Desktop/f.xml");
User userBean = (User) XMLAPI.readXML(new FileInputStream(file));
System.out.println("XMLParser====="+ userBean);
//为解析出的对象新加一本书,名称为XMLParser,输出到f2.xml
userBean.books.getBooks().add(new Book("XMLParser"));
XMLAPI.writeObj2Xml(userBean,"/Users/lijie/Desktop/f2.xml");
}
結果:
<?xml version="1.0" encoding="UTF-8"?>
<User name="test" age="18" marry="true">
<Books>
<Book name="java"/>
<Book name="android"/>
<Book name="XMLParser"/>
</Books>
<Phone number="110110110" type="home"/>
<Phone number="221221221" type="company"/>
</User>
分析:
XMLファイルの内容によると、無視でマークされた既婚者は出力されておらず、PhoneのphoneNumもname = "number"に従って出力されていることがわかります。
総括する
上記はXMLParserの基本的な使用法です。私は2年間働いており、能力が限られています。以前はYoudaoyunを使用してメモを取りました。ブログ投稿を書き始めたばかりです。記事には多くの欠点があり、プログラムにはまだ多くの最適化と変更があります。サポートしていただければ幸いです。最後に、GitHubアドレスlijieqing / XMLParserを添付します