DDEX解析实战

1.简介

使用****XXX公司传输的ddex.xml文件为例子,解析例子为伪代码,主要是阐述ddex.xml 文件的解析思路和关键文本解释。

2.解析DDEX思路主要是4部分

1.解析MessageHeader解析后

MessageHeader是ddex文件中第一部份,属于消息的头部信息,主要是定义传输者、接收者、

2.解析MessageSender 解析后

3.releaseList 解析后 通过字段的形式,存到各个业务表中

releaseList属于发行相关的领域,而不是ddex本身,更像是一个传输协议。用于解析DDEX文件中的数据转换成

4.dealList 解析后组成json形式存储

dealList是当前这个三个框架中付费信息,歌曲发行的领域是需要的,并且信息中还覆盖到当前的歌曲。

3.解析语言和框架

1.使用解析语言是JAVA语言

2.使用解析框架只要是解析xml的文件就可以,目前项目使用的解析框架是JAVA解析xml老牌框架,dom4j

使用的体验非常好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class DDEXParser {
public static void main(String[] args) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read("ddex.xml");
Element root = document.getRootElement();

// 第一部份 解析MessageHeader,映射到MessageHeader类
Element messageHeader = root.element("MessageHeader");
MessageHeader header = new MessageHeader();
header.setMessageThreadId(messageHeader.element("MessageThreadId").getText());
header.setMessageId(messageHeader.element("MessageId").getText());
// 第二部分 解析MessageSender
Element messageSender = messageHeader.element("MessageSender");
MessageSender sender = new MessageSender();
sender.setPartyId(messageSender.element("PartyId").getText());
sender.setPartyName(messageSender.element("PartyName").element("FullName").getText());
header.setMessageSender(sender);


// 第三部份 解析ReleaseList,映射到Release类
Element releaseList = root.element("ReleaseList");
for (Element release : releaseList.elements("Release")) {
Release r = new Release();
r.setLanguageAndScriptCode(release.attributeValue("LanguageAndScriptCode"));
r.setIsMainRelease(Boolean.parseBoolean(release.attributeValue("IsMainRelease")));
// 解析ReleaseId,映射到ReleaseId类
Element releaseId = release.element("ReleaseId");
ReleaseId id = new ReleaseId();
id.setICPN(releaseId.element("ICPN").getText());
id.setProprietaryId(releaseId.element("ProprietaryId").getText());
r.setReleaseId(id);

}

// 第四部分 解析DealList,映射到Deal类
Element dealList = root.element("DealList");
for (Element deal : dealList.elements("Deal")) {
Deal d = new Deal();
// 解析DealTerms,映射到DealTerms类
Element dealTerms = deal.element("DealTerms");
DealTerms terms = new DealTerms();
terms.setCommercialModelType(dealTerms.element("CommercialModelType").getText());
terms.setUseType(dealTerms.element("UseType").getText());
terms.setWholesalePricePerUnit(dealTerms.element("WholesalePricePerUnit").getText());
d.setDealTerms(terms);

}
}
}