2012-01-13 2 views
0

有効なxhtmlでないコンテンツに対してXMLParseを使用しようとしています。 HTMLコードでは、タグは正しく終了していません。それらを終了させるために、replace関数を使用して無効なコードを見つけ出し、適切に終了したコードに置き換えます。そうすることで、私のアプリケーションでエラーが発生し、メタタグが無効であることがわかります:有効なXMLをColdFusion XMLParseで作成する

XML文書の解析中にエラーが発生しました。

エレメントタイプ "meta"は、一致する終了タグ ""で終わらなければなりません。

私が検証しようとしているコードは次のとおりです。

<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のソースを何とかしっかりとコントロールしてくれることを願っています。もしそうでなければ、このアプローチは確実に頭痛の原因になります。 –

答えて

2

は私になります。

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

注>

だから、上記の特定の技術的な質問に対処します」の追加をI」にあなたが見たように、適切なXHTMLにマッシュアップしようとすると、HTML上の文字列操作を行うのは難しいのですが、実際のHTMLパーサに賛成してXMLParseを放棄することを検討してください例えばJSOUP。jarをダウンロードしてCFクラスパスに追加したら、次のようなことができます:

<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

関連する問題