【发布时间】:2011-09-06 13:36:59
【问题描述】:
我搜索了许多 Java API 来将 xml 解析为 HTML,但从我开始的地方开始感到困惑。我从来没有做过任何 xml 到 html 的解析任务。这是以 xml 数据形式解析第 3 方的简历的输出,我必须将其转换为 html。
最好的问候
【问题讨论】:
标签: html xml parsing xml-parsing
我搜索了许多 Java API 来将 xml 解析为 HTML,但从我开始的地方开始感到困惑。我从来没有做过任何 xml 到 html 的解析任务。这是以 xml 数据形式解析第 3 方的简历的输出,我必须将其转换为 html。
最好的问候
【问题讨论】:
标签: html xml parsing xml-parsing
没有“解析为html”,也许你的意思是“转换为html”,在这种情况下看看XSLT。
XSLT 是一种将 XML 转换为另一种 XML 的语言(用 XML 本身编写),而 XHTML 恰好是一种 XML,因此使用 XSLT 您可以从一种转换到另一种。
至于要使用的Java库,可以直接使用JRE中的类,即javax.xml.transform.TransformerFactory及相关类。否则,您可以直接使用 XALAN(请参阅 http://xalan.apache.org)或 SAXON,或 Cocoon 3 (http://cocoon.apache.org),这使得解析、转换和保存结果文件变得透明。
【讨论】:
免责声明:我为 Sovren 工作,这是一家简历/CV 解析器供应商。
一般有两种将简历/简历转换为 HTML 的方法:
直接从原始格式(DOC、DOCX、RTF 等)转换为 HTML,保留原始 Resume/CV 的布局和外观。有许多通用文档转换工具可以做到这一点。一些 Resume/CV Parser 供应商在他们的产品中包含了这个功能(Sovren 有)。
解析简历/简历以将数据提取为 XML 等结构化格式,然后将该 XML 转换为 HTML。这种方法的优点是能够将各种各样的简历/简历布局转换为用户的通用“品牌”布局。请咨询您的简历/CV 解析供应商,看看他们是否提供用于将其 XML 转换为 HTML、RTF 等的 XSLT 模板。Parsing-Resume/CV-to-XML,然后是 Transforming-XML-to-HTML 的过程可以消除过度90% 的手动工作,但请注意,您不应计划将此过程 100% 自动化。即使是最好的 Resume/CV 解析器也难以解释 一些 Resumes/CV,因此会有一些奇怪的结果,并且您需要人工验证/编辑结果,然后再显示生成的 HTML Resume/给客户的简历。
Sovren 提供用于将其 XML 转换为其他格式的入门 XSLT 模板。我无法提供完整的 XSLT 模板,但这是一个重写的 XSLT 模板子集,用于将 ContactInfo 数据从 HR-XML Resume 2.5 转换为 HTML:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:hr="http://ns.hr-xml.org/2006-02-28"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
exclude-result-prefixes="xsl xsi hr">
<xsl:output method="xml"
media-type="text/html"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
indent="yes"
encoding="utf-8"/>
<xsl:template match="/">
<html>
<head>
<title>HTML Resume from HR-XML Resume 2.5</title>
<style type="text/css">
body { font-family: sans-serif; font-size: 10pt }
th { font-family: sans-serif; font-size: 10pt; font-weight: bold; padding-right: 16px; text-align: left;}
td { font-family: sans-serif; font-size: 10pt; padding-right:16px; }
h1 { font-family: sans-serif; font-size: 12pt; background-color: #FFFFCC; margin-top: 20px }
h2 { font-family: sans-serif; font-size: 10pt; font-style: bold; margin-top: 20px }
</style>
</head>
<body>
<p>
<img src="Logo.png" alt="" />
</p>
<xsl:for-each select="/hr:Resume/hr:StructuredXMLResume/hr:ContactInfo">
<h1>CONTACT INFORMATION</h1>
<p>
<b>
<xsl:value-of select="hr:PersonName/hr:FormattedName"/>
</b>
<br/>
<xsl:for-each select=".//hr:PostalAddress">
<xsl:text>Location: </xsl:text>
<xsl:value-of select="hr:Municipality"/>
<xsl:if test="string-length(hr:Municipality) > 0 and string-length(hr:Region) > 0">
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:value-of select="hr:Region"/>
<xsl:if test="string-length(hr:Municipality) > 0 or string-length(hr:Region) > 0">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="hr:CountryCode"/>
</xsl:for-each>
<br/>
<xsl:for-each select=".//hr:InternetEmailAddress">
Email: <a href="mailto:"><xsl:value-of select="."/></a>
<br/>
</xsl:for-each>
<xsl:for-each select=".//hr:Telephone/hr:FormattedNumber">
Phone: <xsl:value-of select="."/>
<br/>
</xsl:for-each>
<xsl:for-each select=".//hr:Mobile/hr:FormattedNumber">
Mobile: <xsl:value-of select="."/>
<br/>
</xsl:for-each>
<xsl:for-each select=".//hr:Fax/hr:FormattedNumber">
Fax: <xsl:value-of select="."/>
<br/>
</xsl:for-each>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
【讨论】: