Создание правильного XML с ColdFusion XMLParse - PullRequest
0 голосов
/ 13 января 2012

Я пытаюсь использовать XMLParse для содержимого, которое не является допустимым xhtml. В 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#">

Как я могу устранить эту ошибку?

1 Ответ

2 голосов
/ 13 января 2012

Похоже, вы пропустили часть подстроки в вашем вызове на замену:

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

Обратите внимание на добавление ">

. Таким образом, приведенный выше ответ на ваш конкретный технический вопросОднако я хотел бы предложить лучший подход к вашей общей задаче. Выполнять манипуляции со строками в HTML, пытаясь втиснуть его в надлежащий XHTML, в лучшем случае сложно (как вы уже видели). Вместо этого рассмотрите отказ от XMLParse в пользуфактический HTML-анализатор, такой как JSOUP . После того, как вы скачаете jar-файл и добавите его в ваш путь к классам CF, вы можете сделать что-то вроде этого:

<code><cfset jsoup = CreateObject("java", "org.jsoup.Jsoup")>
<cfsavecontent variable="html">
<html>
<body>
<hr>
<pre id="blah">Foo<br>bar1

Foo
bar2

Который выдаст:

Foo<br />bar1

Довольно элегантно, а?И не нужно ломать голову над получением точных деталей с помощью XML.

...