使用ColdFusion XMLParse创建有效的XML

使用ColdFusion XMLParse创建有效的XML,coldfusion,xml-parsing,coldfusion-9,Coldfusion,Xml Parsing,Coldfusion 9,我试图对无效的xhtml内容使用XMLParse。在html代码中,标记没有正确终止。为了终止它们,我使用replace函数查找无效代码,并用正确终止的代码替换它。在执行此操作时,我的应用程序出错,并告诉我meta标记无效: 分析XML文档时出错 元素类型“meta”必须由匹配的结束标记“”终止 我试图验证的代码是: <html> <head> <title>Impart Client Interface</title> <link href

我试图对无效的xhtml内容使用XMLParse。在html代码中,标记没有正确终止。为了终止它们,我使用replace函数查找无效代码,并用正确终止的代码替换它。在执行此操作时,我的应用程序出错,并告诉我meta标记无效:

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

#validXML#

如何解决此错误?

在我看来,替换调用中缺少部分子字符串:

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

注意添加了“>

因此,以上内容将解决您的具体技术问题。然而,我想建议一种更好的方法来完成您的一般任务。在HTML上进行字符串操作以尝试将其混入适当的XHTML,这充其量是一件棘手的事情(如您所见)相反,考虑放弃XMLPARSE,支持一个实际的HTML解析器,例如,在下载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
bar1
Foo
bar2
这将输出:

Foo<br />bar1
Foo
bar1

非常漂亮,是吗?而且不必为正确使用XML获取确切细节而费心。

我希望您对这个(x)HTML的源代码有一些可靠的控制-如果没有,这种方法肯定会继续令人头痛。因为我无法控制源代码,所以我开始使用jSoup。