我正在尝试对无效的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#">
如何解决此错误?
答案 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获取确切的详细信息。