2012-01-13 59 views
0

我正在嘗試使用XMLParse來對付無效的xhtml內容。在html代碼中,標籤沒有正確終止。爲了終止它們,我使用替換函數來查找無效代碼,並用正確終止的代碼替換它。在這樣做時,我的應用程序出錯,並告訴我該元標記無效:使用ColdFusion創建有效的XML XMLParse

解析XML文檔時發生錯誤。

元素類型「元」必須由匹配的結束標記「」終止。

我試圖驗證碼:

<html> 
<head> 
<title>Impart Client Interface</title> 
<link href="side_panel.css" rel="stylesheet" type="text/css"> 
<link href="default.css" rel="stylesheet" type="text/css"> 
<link href="tabs.css" rel="stylesheet" type="text/css"> 
<link href="data_tables.css" rel="stylesheet" type="text/css"> 
<link href="xp_button.css" rel="stylesheet" type="text/css"> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 

我在CF已經創建試圖處理是這樣的:

<cfset xml = objResponse.FileContent> 

<cfset page.content = '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'> 
<cfset page.updatedcontent = replace('#page.content#','8859-1','8859-1" />"','')> 
<Cfset page.link = 'type="text/css">'> 
<cfset page.updatedLink = replace('#page.link#', 'css">', 'css" />', 'all')> 



<cfset validXML = replace(#xml#, "#page.content#", "#page.updatedContent#", "")> 
<cfset validXML = replace(#xml#, "#page.link#", "#page.UpdatedLink#", "all")> 
<cfoutput>#validXML#</cfoutput>  

<cfset parsethis = xmlparse(validXML)> 

<cfdump var="#parsethis#"> 

我怎樣才能解決這個問題?

+0

我希望你對這個(x)HTML的來源有一個穩固的控制 - 如果不是的話,這種方法肯定會成爲頭痛的源頭。 – 2012-01-13 19:38:49

回答

2

看起來像你對我缺少子的一部分,你的更換電話:

<cfset page.updatedcontent = replace(page.content,'8859-1">','8859-1" />')> 

注意添加「>

所以,上面會滿足您的特定技術問題我」但是,對HTML進行字符串操作以嘗試將它合併到正確的XHTML中是非常棘手的(正如你所看到的那樣),相反,考慮放棄XMLParse以支持實際的HTML解析器,比如JSOUP。下載jar並將它添加到你的CF classpath後,你可以這樣做:

<cfset jsoup = CreateObject("java", "org.jsoup.Jsoup")> 
<cfsavecontent variable="html"> 
<html> 
<body> 
<hr> 
<pre id="blah">Foo<br>bar1</pre> 
<hr> 
<pre id="blah2">Foo<br>bar2</pre> 
</body> 
</html> 
</cfsavecontent> 

<cfdump var="#jsoup.parse(html).select('pre').first().html()#"> 

將輸出:

Foo<br />bar1 

漂亮漂亮,不是嗎?而且不需要通過XML獲取確切的細節。

+0

因爲我無法控制源代碼,所以我選擇使用jSoup。 – aparker81 2012-01-16 15:59:33