網站后臺中對html標簽的處理

最近做一個CMS,后臺中需要使用在線編輯器對新聞進行編輯,然后發表。我用的在線編輯器是CKEditor+CKFinder。也許是我為了讓CKEditor更本地化吧,改了很多。后來發現在CKEditor中對文字設置字體、顏色、字號大小時文字的<span>標簽會出現N個的嵌套。我們知道,當span標簽以嵌套方式出現的時候,它往往是以最后一個span標簽的style方式顯示的。也就是說外面的span標簽的style就都被屏蔽了。這個讓人有點郁悶~~.

? ? ? 一開始想的解決辦法是自己在其中查找span標簽然后進行處理,但是想不好怎么解決嵌套的問題。后來琢磨使用正則表達式,也在網上查了很多資料。結果發現正則表達式真的復雜得頭疼,而且其實也無法很好地處理嵌套標簽的問題。

? ? ? 一個偶然的機會~~(這句話聽得很耳熟),我看到有人建議使用XmlDocument來進行處理。 我恍然大悟,我心里在吶喊:我的“病”有救了(還好面對的不是電線桿~~~~)。當然,使用XmlDocument之前你需要把CKEditor中的字符串處理一下,也就是符合xml規范。這個很簡單,只要在外面加一個<div>標簽作為根節點就成了。下面就貼上代碼:

ExpandedBlockStart.gifView Code?
?1?????string?content?=?"<div>"?+?BulletinBodyTxt.Text?+?"</div>";
?2?????var?doc?=?new?XmlDocument();
?3?????doc.LoadXml(content);
?4?????XmlNodeList?nodes?=?doc.GetElementsByTagName("span");
?5?
?6?????string?style?=?string.Empty,?preText?=?string.Empty;
?7?????foreach?(XmlNode?node?in?nodes)
?8?????{
?9?????????if?(node.InnerText?==?preText)
10?????????{
11?????????????if?(node.Attributes?!=?null?&&
12?????????????????style.IndexOf(node.Attributes["style"].Value,?StringComparison.Ordinal)?<?0)
13?????????????????style?+=?node.Attributes["style"].Value;
14?????????}
15?????????else
16?????????{
17?????????????if?(node.Attributes?!=?null)?style?=?node.Attributes["style"].Value;
18?????????????preText?=?node.InnerText;
19?????????}
20?????????if?(node.Attributes?!=?null)
21?????????{
22?????????????node.Attributes["style"].Value?=?style;
23?????????}
24?????????else
25?????????{
26?????????????node.Attributes.Append(CreateAttribute(node,?"style",?style));
27?????????????//node.Attributes.Append()
28?????????}
29?????}
30

這其中會有判斷如果span標簽里attribute為空的情況,使用了一個私有的CreateAttribute方法進行添加,這個方法的代碼如下:

ExpandedBlockStart.gifView Code?
?1?????private?XmlAttribute?CreateAttribute(XmlNode?node,?string?attributeName,?string?value)
?2?????{
?3?????????try
?4?????????{
?5?????????????XmlDocument?doc?=?node.OwnerDocument;
?6?????????????if?(doc?!=?null)
?7?????????????{
?8?????????????????XmlAttribute?attr?=?doc.CreateAttribute(attributeName);
?9?????????????????attr.Value?=?value;
10?????????????????node.Attributes.SetNamedItem(attr);
11?????????????????return?attr;
12?????????????}
13?????????}
14?????????catch?(Exception?err)
15?????????{
16?????????????string?desc?=?err.Message;
17?????????}
18?????????return?null;
19

這樣,這個問題就基本解決了。為什么說只是基本解決而不是根本解決?因為嵌套span還存在,只是把外層的style都寫到最里層的style?里了。完美的做法是去掉嵌套,只保留一個span。這個因為時間原因就暫且留到日后解決吧。

轉載于:https://www.cnblogs.com/eliminator/archive/2012/07/28/2613391.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379458.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379458.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379458.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Calendar getActualMaximum()方法與示例

日歷類的getActualMaximum()方法 (Calendar Class getActualMaximum() method) getActualMaximum() method is available in java.util package. getActualMaximum()方法在java.util包中可用。 getActualMaximum() method is used to return the maximum value that the given …

軟件研發人員考核的十項基本原則(轉)

軟件研發人員考核的十項基本原則 作者: 任甲林 來源: 萬方數據 軟件研發人員的考核一直是軟件企業管理的難點筆者在長期的研發管理實踐與咨詢實踐中總結了進行軟件研發人員考核的一些基本原則。(1) 要體現公司的價值觀公司的價值觀體現了公司認可什么類型的人員&#xff1f;…

2012.7.24---C#(2)

學習過了C#的基本屬性函數后&#xff0c;接下來的學習我覺得比較重要。C#是一種面向對象的語言&#xff0c;下面復習一下面向對象中的一些名詞。 類&#xff1a;把一些系列東西&#xff0c;把他們的共同的屬性和方法抽象出來&#xff0c;給他起一個名字就是XXX類。類中定義…

匯編語言-001(BYTE、DUP、WORD 、DWORD 、QWORD 、TBYTE 、REAL )

1 : 基礎匯編語言展示 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov eax,5add eax,6INVOKE ExitProcess,0 main ENDP END main2:基礎匯編語言展示增加變量的訪問 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dw…

<各國地圖輪廓app>技術支持

如在app使用過程中遇到任何問題&#xff0c;請與開發者聯系caohechunhotmail.com

Java BigDecimal longValueExact()方法與示例

BigDecimal類longValueExact()方法 (BigDecimal Class longValueExact() method) longValueExact() method is available in java.math package. longValueExact()方法在java.math包中可用。 longValueExact() method is used to convert this BigDecimal to an exact long val…

c#中的多線程同步

在處理多線程同步問題的時候&#xff0c;我們一般有臨界區&#xff0c;互斥量&#xff0c;信號量和消息機制等幾種解決方案&#xff0c;在c#中可以非常方便的使用它們來實現進程的同步。下面我就常用的lock,Monitor和Mutex幾種來說明如何實現進程的同步。 lock和Monitor依靠一種…

ffplay SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client“

windows下&#xff1a; ffplay 提示"SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can’t initialize audio client" 添加環境變量&#xff1a;SDL_AUDIODRIVERdirectsound

js 正則表達式,正整數

var ss "3.333";var type /^[0-9]*[1-9][0-9]*$/;var re new RegExp(type);alert(ss.match(re));if (ss.match(re) null) {alert("請輸入大于零的整數!");return;} 轉載于:https://www.cnblogs.com/lingxzg/archive/2012/08/02/2620543.html

java 根據類名示例化類_Java即時類| EpochSecond()方法的示例

java 根據類名示例化類EpochSecond()方法的即時類 (Instant Class ofEpochSecond() method) Syntax: 句法&#xff1a; public static Instant ofEpochSecond(long sec_val);public static Instant ofEpochSecond(long sec_val, long nanos_adjust);ofEpochSecond() method is…

java中Date()類型輸入數據的處理

對于Date類型的數據&#xff0c;需要輸入生日存入相應數據庫中 private Date birthday;// 生日package com.pdsu.mybatis.pojo;import java.io.Serializable; import java.util.Date;public class User implements Serializable {/*** */private static final long serialVers…

(擴展)歐幾里德快速冪

GCD模板 __int64 gcd(__int64 a,__int64 b) {return b0? a:gcd(b,a%b); } 歐幾里德算法又稱輾轉相除法&#xff0c;用于計算兩個整數a,b的最大公約數。其計算原理依賴于下面的定理&#xff1a; gcd函數就是用來求(a,b)的最大公約數的。 gcd函數的基本性質&#xff1a; gcd(a,…

匯編語言-002(.data、Equal、$、EQU 、MOV 、MOVSX、MOVZX)

1&#xff1a;變量相加程序 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data firstval DWORD 20002000h secondval DWORD 11111111h thirdval DWORD 22222222h sum DWORD 0.code main PROCmov eax,firstvaladd eax,secondvaladd eax,thirdvalm…

\r與\n的區別,\r\n與\n或\r的區別(C語言/C#)

本文出處http://topic.csdn.net/t/20020718/07/882679.html 原作者:triout&#xff08;笨牛&#xff09; \r表示回車&#xff0c;\n表示換行&#xff0c;我們按回車按鈕的時候&#xff0c;系統自動產生回車和換行兩個字符&#xff1a; 回車僅僅是表示完成&#xff0c;把光…

通過ID查詢一個用戶的兩種開發方法

通過ID查詢一個用戶的兩種開發方法 數據庫建表sql語句如下&#xff1a;https://github.com/beyondyanyu/Sayingyy/blob/master/JDBC2-數據庫sql建表語句 ①&#xff0c;原始Dao開發&#xff1a; UserDao.java&#xff08;接口&#xff09;: package com.pdsu.mybatis.dao;i…

duration java_Java Duration類| minusMinutes()方法與示例

duration java持續時間類minusMinutes()方法 (Duration Class minusMinutes() method) minusMinutes() method is available in java.time package. minusMinutes()方法在java.time包中可用。 minusMinutes() method is used to subtract the given duration in minutes from t…

Silverlight + WCF異步調用 例子

看大家好像對我的NParsing框架不是很感興趣&#xff08;寫NParsing帖沒人頂我&#xff09;&#xff0c;那就給大家來點“甜品”&#xff0c;換換口謂。來說說Silverlight方面的東西。 在Silverlight中數據通信只能用異步。有人會覺得寫起來很麻煩&#xff0c;其實不然。也有很簡…

我博客主頁的搜索功能怎么不好用

用博客里面的搜索功能&#xff0c;“找找看”&#xff0c;搜索我博客里面的關鍵字&#xff0c;但是不能出現結果。但是我在別人的主頁上能夠搜索該人的內容&#xff0c;能夠查詢到記錄&#xff0c;難道博客園對每個博客的信息要先排序&#xff1f;目前我的還不在他的搜索數據庫…

小議SqlMapConfig.xml配置文件

①、mybatis-3-config.dtd 主要用于mybatis的核心配文件sqlMapConfig.xml的約束 sqlMapConfig.xml代碼如下&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&q…

ffmepg 命令提取音視頻數據

原文件&#xff1a; 1&#xff1a; 原音頻數據提取&#xff08;保留還是mp4的封裝格式的&#xff09;&#xff1a; ffmpeg -i test_1920x1080.mp4 -acodec copy -vn audio.mp4 -vn 就是沒有視頻&#xff0c; -acodec copy 音頻拷貝不進行任何轉碼 原視頻數據提取&#xff0…