基于java開發小(xiǎo)程序接口,後台使用(yòng)ueditor編輯圖文(wén)内容。
小(xiǎo)程序如何顯示富文(wén)本内容呢(ne)?
一、直接傳入html
nodes 屬性推薦使用(yòng) Array 類型,由于組件會将 String 類型轉換為(wèi) Array 類型,因而性能(néng)會有(yǒu)所下降
直接将html内容傳入是可(kě)以,但是無論從性能(néng)還是顯示樣式來說都會有(yǒu)問題,所以不推薦這樣做。
二、wxParse
網上現在較多(duō)的解決方法都是在小(xiǎo)程序裏引入wxParse插件來解決。
考慮到引入額外的插件會使得程序變大,所以就沒有(yǒu)詳細研究,有(yǒu)興趣的可(kě)以自行百度。
三、解析成json
public class RichTextParse {
public static List<Object> parse(String body) throws DocumentException {
List<Object> nodes = new ArrayList<Object>();
Document doc = null;
doc = DocumentHelper.parseText("<xml>" + body + "</xml>"); // 将字符串轉為(wèi)XML
Element rootElt = doc.getRootElement(); // 獲取根節點
List<Element> list = rootElt.elements();// 獲取根節點下所有(yǒu)節點
for (Element element : list) { // 遍曆節點
RichTextNode node = new RichTextNode();
node.setName(element.getName());
// attrs
for (Iterator it = element.attributeIterator(); it.hasNext();) {
Attribute attr = (Attribute) it.next();
node.getAttrs().put(attr.getName(), attr.getText());
}
// has children
if (!element.isTextOnly()) {
loopElement(node, element);
} else {
RichTextNodeText nodeText = new RichTextNodeText();
nodeText.setType("text");
nodeText.setText(element.getText());
node.getChildren().add(nodeText);
}
// add to nodes
nodes.add(node);
}
return nodes;
}
private static void loopElement(RichTextNode nodeParent, Element elementParent) {
List<Element> eles = elementParent.elements();
for (Element element : eles) {
RichTextNode node = new RichTextNode();
node.setName(element.getName());
// attrs
for (Iterator it = element.attributeIterator(); it.hasNext();) {
Attribute attr = (Attribute) it.next();
node.getAttrs().put(attr.getName(), attr.getText());
}
//
switch (element.getName()) {
case "img":
node.getAttrs().put("style", "max-width:100%;height:auto;");
break;
default:
break;
}
// has children
if (!element.isTextOnly()) {
loopElement(node, element);
} else {
RichTextNodeText nodeText = new RichTextNodeText();
nodeText.setType("text");
nodeText.setText(element.getText());
node.getChildren().add(nodeText);
}
// add to parent node
nodeParent.getChildren().add(node);
}
}
}
public class RichTextNode {
private String name;
private HashMap<String, String> attrs;
private List<Object> children;
public RichTextNode() {
super();
this.attrs = new HashMap<String, String>();
this.children = new ArrayList<Object>();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HashMap<String, String> getAttrs() {
return attrs;
}
public void setAttrs(HashMap<String, String> attrs) {
this.attrs = attrs;
}
public List<Object> getChildren() {
return children;
}
public void setChildren(List<Object> children) {
this.children = children;
}
}
public class RichTextNodeText {
private String type;
private String text;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
這裏測試了簡單的圖文(wén)編輯沒有(yǒu)問題(html層級隻有(yǒu)2層),暫未測試更複雜的多(duō)層嵌套的html(例如直接複制網頁(yè)内容粘貼過來)。
後續發現将html當成簡單xml來解析隻能(néng)處理(lǐ)簡單的内容,最後改成jsoup來解析
/article_90.html
- 版權所有(yǒu):奇站網絡 轉載請注明出處
- 廈門奇站網絡科(kē)技(jì )有(yǒu)限公(gōng)司,專業提供網站建設,響應式網站建設,小(xiǎo)程序開發,系統定制開發。
- 軟件開發咨詢熱線(xiàn):吳小(xiǎo)姐 13313868605