使用ColdFusion XMLParse创建有效的XML

时间:2012-01-13 19:26:46

标签: coldfusion xml-parsing coldfusion-9

我正在尝试对无效的xhtml内容使用XMLParse。在html代码中,标签未正确终止。为了终止它们,我使用replace函数来查找无效代码并用正确终止的代码替换它。这样做,我的应用程序出错并告诉我元标记无效:

解析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#">

如何解决此错误?

1 个答案:

答案 0 :(得分:2)

在我看来你错过了替换调用中的部分字符串:

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

请注意添加“&gt;

因此,以上内容将解决您的具体技术问题。不过,我想建议一个更好的方法来完成你的一般任务。在HTML上进行字符串操作以尝试将其混合到正确的XHTML中是最棘手的(正如您所见)。相反,请考虑放弃XMLParse以支持实际的HTML解析器,例如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获取确切的详细信息。