使用SAX和W3C Java库的XML/HTML生成器类可以';不能处理HTML输入
全部, 我正在开发一个JavaWeb服务,它从外部数据库获取归档数据 要求是,除了以XML消息的形式返回结果外,客户机还可以请求将结果显示在HTML页面上 此图描述了高级设计: 但我在实施时意识到,XML和HTML并不完全相同,例如:使用SAX和W3C Java库的XML/HTML生成器类可以';不能处理HTML输入,java,html,xml,saxparser,Java,Html,Xml,Saxparser,全部, 我正在开发一个JavaWeb服务,它从外部数据库获取归档数据 要求是,除了以XML消息的形式返回结果外,客户机还可以请求将结果显示在HTML页面上 此图描述了高级设计: 但我在实施时意识到,XML和HTML并不完全相同,例如: HTML解析可以允许不关闭特定元素 这导致我当前的类实现抛出这些错误(由HTML输入引起) 错误消息 [03/Mar/2014:09:12:05] warning (19052): CORE3283: stderr: [Fatal Error] we
- HTML解析可以允许不关闭特定元素
[03/Mar/2014:09:12:05] warning (19052): CORE3283: stderr: [Fatal Error] web.html:1:3: The markup in the document preceding the root element must be well-formed.
[03/Mar/2014:09:12:05] warning (19052): CORE3283: stderr: org.xml.sax.SAXParseException: The markup in the document preceding the root element must be well-formed.
我的代码
import org.w3c.dom.*;
import javax.xml.parsers.*;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
public class OutputBuilder
{
private DocumentBuilderFactory docBF;
private DocumentBuilder docBuilder;
private Document doc;
private static float UUID;
private String docType;
public OutputBuilder(String template, String output) throws ParserConfigurationException, SAXException, IOException
{
docBF = DocumentBuilderFactory.newInstance();
docBuilder = docBF.newDocumentBuilder();
//set the base document to the specified template file
doc = docBuilder.parse(new File(template));
//
docType = output;
}
/*
* Build the final document by adding values passed in from query results
*/
public void fillTemplate(ResultSet qR) throws SQLException
{
if(docType.equals("html"))
{
//find the designated point of data insertion to the html document
Element appendPoint = doc.getElementById("archive_table");
//get meta data column names for table header row
ResultSetMetaData rsmd = qR.getMetaData();
//generate this first row which is the header
Element headerRow = doc.createElement("tr");
//create a column in the table header for each column in the query results
for (int i = 0; i < rsmd.getColumnCount(); i++)
{
Element tableH = doc.createElement("th");
tableH.setNodeValue(rsmd.getColumnName(i));
headerRow.appendChild(tableH);
}
//append header row to table
appendPoint.appendChild(headerRow);
//fill table body rows with query results
while(qR.next())
{
//create a table row for each row in query results
Element bodyRow = doc.createElement("tr");
//fill that row with all column values in query results
for(int i = 0; i < rsmd.getColumnCount(); i++)
{
Element tableB = doc.createElement("td");
tableB.setNodeValue(qR.getString(i));
bodyRow.appendChild(tableB);
}
//add each constructed row to the table
appendPoint.appendChild(bodyRow);
}
}
else
{
//do XML construction
}
}
}
导入org.w3c.dom.*;
导入javax.xml.parsers.*;
导入org.w3c.dom.Element;
导入org.xml.sax.SAXException;
公共类输出生成器
{
私人文档生成器工厂docBF;
私人文档生成器文档生成器;
私人文件文件;
私有静态浮点UUID;
私有字符串docType;
公共OutputBuilder(字符串模板、字符串输出)抛出ParserConfiguration异常、SAXException、IOException
{
docBF=DocumentBuilderFactory.newInstance();
docBuilder=docBF.newDocumentBuilder();
//将基础文档设置为指定的模板文件
doc=docBuilder.parse(新文件(模板));
//
docType=输出;
}
/*
*通过添加从查询结果传入的值来构建最终文档
*/
公共void fillTemplate(ResultSet qR)引发SQLException
{
if(docType.equals(“html”))
{
//找到html文档的指定数据插入点
元素appendPoint=doc.getElementById(“归档表”);
//获取表标题行的元数据列名
ResultSetMetaData rsmd=qR.getMetaData();
//生成作为标题的第一行
元素headerRow=doc.createElement(“tr”);
//在表标题中为查询结果中的每一列创建一列
对于(int i=0;i请投票选出一个问题的好例子我建议您开始使用专用的html解析器进行此类操作。我个人使用Jsoup 您也可以使用它构建自己的HTML结构