【问题标题】:Creating valid XML with ColdFusion XMLParse使用 ColdFusion XMLParse 创建有效的 XML
【发布时间】:2012-01-13 19:26:46
【问题描述】:

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

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

我该如何解决这个错误?

【问题讨论】:

  • 我希望你对这个 (x)HTML 的来源有一些可靠的控制 - 如果没有,这种方法肯定会继续令人头疼。

标签: coldfusion xml-parsing coldfusion-9


【解决方案1】:

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

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

注意增加了">

因此,以上内容将解决您的具体技术问题。但是,我想建议一种更好的方法来完成您的一般任务。对 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 获取准确的细节。

【讨论】:

  • 由于我无法控制源代码,所以我开始使用 jSoup。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多