具體做法如下,
因?yàn)楸4婧图虞dxml是在XMLResourceImpl里面進(jìn)行的,所以我們需要從該類(lèi)繼承,overriding 相應(yīng)的load和save方法,然后在使用到XMLResourceImpl的地方改成使用我們的派生之類(lèi),在定制的子類(lèi)中,我們做了如下實(shí)現(xiàn):
java 代碼
- public void load(Map options) throws IOException {
- super.load(addOptions(options));
- }
- public void save(Map options) throws IOException {
- super.save(addOptions(options));
- }
- /**
- * 設(shè)置序列化/反序列化選項(xiàng)
- *
- * @param options
- */
- private Map addOptions(Map options) {
- // 這里的map只應(yīng)創(chuàng)建一次
- XMLResource.XMLMap xmlMap = new XMLMapImpl();
- EPackage ePackage = Configuration.INSTANCE.getViewEPackage();
- XMLResource.XMLInfo info = new XMLInfoImpl();
- info.setXMLRepresentation(XMLResource.XMLInfo.CONTENT);
- // 將event的內(nèi)容在attribute和content之間轉(zhuǎn)換
- EClass eClass = (EClass) ePackage
- .getEClassifier(Configuration.EVENT_NAME);
- xmlMap.add(eClass
- .getEStructuralFeature(Configuration.EVENT_ATTRIBUTE_CONTENT),
- info);
- // 在生成的ddxml中去掉namespace聲明
- xmlMap.setNoNamespacePackage(ePackage);
- if (options == Collections.EMPTY_MAP) {
- options = new HashMap();
- }
- options.put(XMLResource.OPTION_XML_MAP, xmlMap);
- // 避免對(duì)<,>,&等字符進(jìn)行轉(zhuǎn)換
- options.put(XMLResource.OPTION_SKIP_ESCAPE, Boolean.TRUE);
- return options;
- }
因?yàn)槲覀冞@里沒(méi)有對(duì)特殊字符進(jìn)行轉(zhuǎn)換,所以我們需要在生成的content類(lèi)型的內(nèi)容加上<![CDATA, ]]>, 這個(gè)我們需要生成自己的XMLSaveImpl,然后overriding getContent(EObject o, EStructuralFeature[] features)這個(gè)方法:
java 代碼
- protected String getContent(EObject o, EStructuralFeature[] features) {
- if (map == null)
- {
- return null;
- }
- for (int i = 0; i < features.length; i++)
- {
- EStructuralFeature feature = features[i];
- XMLResource.XMLInfo info = map.getInfo(feature);
- if (info != null && info.getXMLRepresentation() == XMLResource.XMLInfo.CONTENT)
- {
- Object value = helper.getValue(o, feature);
- String svalue = getDatatypeValue(value, feature, false);
- if (toDOM)
- {
- Node text = document.createTextNode(svalue);
- currentNode.appendChild(text);
- handler.recordValues(text, o, feature, value);
- }else {
- // 將內(nèi)容前后加上<![CDATA and ]]>
- svalue = "<![CDATA[\n" +svalue + "\n]]>";
- }
- return svalue;
- }
- }
- return null;
- }
當(dāng)然了還必須在前面自己的XMLResourceImpl類(lèi)里面重載createXMLSave()方法:
java 代碼
- protected XMLSave createXMLSave() {
- return new DoradoXMLSaveImpl(createXMLHelper());
- }
安徽新華電腦學(xué)校專(zhuān)業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線(xiàn)咨詢(xún)】