`
summeryhrb
  • 浏览: 20279 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

H2p完善——h2p文件合并和用xsl解析h2p文件

阅读更多

自从javaei网站推出h2p以来,得到了很多人的支持和鼓励,也给出了很多宝贵意见,再次深表谢意。

这些意见主要是三个方面的问题。第一:为什么要生成pdf;第二:h2p文件分成两个,比较繁琐,为什么不合成一个;第三:h2p-toolc#java实现,用起来不够简单,需要进一步完善。这三方面的意见提得非常好,在设计h2p之前,我其实是深思熟虑过的。

为什么要转换成pdf?回答这个问题很简单也很难?我就简单的说一下,首先pdf已成为广泛支持的具有丰富表现力的文档格式;其次pdf是聚合、收藏网络文章的最便利的文档格式,因为其强大的书签功能和瘦小的体积;还有很多,不一一列举了。说到底,h2p就是一个把网络文章整理成pdf的一个完整的解决方案,有些网站也有制作电子书的功能,但是h2p是一个更加通用的解决方案。

关于h2p文件的问题,分成两个文件来描述的确不方便,现在回想起来,当时分成两个文件是考虑的过多了,合并成一个文件迫在眉睫,而这是本文的主要内容。

合并后的h2p文件其后缀为.h2p.xml,主要描述url的信息和url的层次结构,h2p-tool根据h2p文件生成有书签的pdf文档。合并后,对h2p文件的操作变得简单,还可以通过xsl直接展示url的层次结构,而且合作网站对h2p的支持也将变得简单。

经过慎重考虑和仔细设计,h2p文件的一个例子如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.javaei.com/content/h2p/h2p.xsl"?>
<!DOCTYPE book PUBLIC "-//JavaEI/JavaEI h2p Configuration DTD//CN" "http://www.javaei.com/dtd/javaei-h2p.dtd" >
<book name="我的PDF书">
	<chapter name="163">
		<chapter name="163新闻">
			<href id="11111"><![CDATA[http://news.163.com]]></href>
		</chapter>
		<chapter name="163体育">
			<href id="2222"><![CDATA[http://sports.163.com]]></href>
		</chapter>
	</chapter>
	<chapter name="sohu">
		<href id="333"><![CDATA[http://www.sohu.com]]></href>
		<chapter name="sohu新闻">
			<href id="444"><![CDATA[http://news.sohu.com]]></href>
		</chapter>
	</chapter>
</book>

 

对应的dtd如下:

 

 

<!ELEMENT book (chapter+)>
<!ATTLIST book      name   CDATA #REQUIRED>
<!ELEMENT chapter (href?,chapter*)>
<!ATTLIST chapter      name  CDATA  #REQUIRED>
<!ELEMENT href (#PCDATA)>
<!ATTLIST href      id  CDATA  #REQUIRED>

 

利用xsl对该样例文件的解析效果如图:



 

层次结构的深度是没有限制的,h2pxsl实现了对xml的解析和树节点的构造,如果对这方面的问题感兴趣的可以参考我这个xsl。合作网站可以提供自己的xslXsl解析xml生成树的核心代码如下:

	<xsl:template match="//chapter">
		<xsl:for-each select=".">
				<li>
					<img class="nodeimg">
					<xsl:choose>
					<xsl:when test="./chapter">
						<xsl:attribute name="src">http://www.javaei.com/res/images/closed.gif</xsl:attribute>
						<xsl:attribute name="onclick">clicknode(this)</xsl:attribute>
					</xsl:when>
					<xsl:otherwise>
						<xsl:attribute name="src">http://www.javaei.com/res/images/leaf.gif</xsl:attribute>
					</xsl:otherwise>
					</xsl:choose>
					</img>
					<xsl:choose>
						<xsl:when test="./href">
							<a>
								<xsl:attribute name="href"><xsl:value-of select="./href" /></xsl:attribute>
								<xsl:attribute name="target">right</xsl:attribute>
								<xsl:attribute name="class">h2pnodestyle</xsl:attribute>
								<xsl:value-of select="text()" /><xsl:value-of select="@name" />
							</a>
						</xsl:when>
						<xsl:otherwise>
							<xsl:value-of select="text()" /><xsl:value-of select="@name" />
						</xsl:otherwise>
					</xsl:choose>
					<ul class="collapsed">
						<xsl:apply-templates select="./chapter" />
					</ul>
				</li>
		</xsl:for-each>
	</xsl:template>

 

关键是这两句:

<xsl:template match="//chapter">

<xsl:apply-templates select="./chapter" />

这实际上形成了递归调用。

关于h2p-tool的问题,不得不说,这是个难题。要求根据url生成的pdf展现效果与浏览器里展现的效果一致,这无异于做一个浏览器,难度可想而知。在java领域,目前还没找到一个可以用的解决方案,所以才不得不借助于别人的c#的组件。h2p-tool的完善工作将是以后的主要方向,大家如果有好的思路,请不吝赐教。

 

 

h2p详细介绍
   h2p文件示例

  • 大小: 4.3 KB
0
0
分享到:
评论

相关推荐

    xml和xsl生成html页面

    在实际应用中,我们可以使用XML解析器(如Java的DOM或SAX解析器)读取XML文档,然后结合XSLT处理器(如Saxon或Xalan)和XSL样式表进行转换,生成HTML页面供浏览器展示。例如,`test.xml`可能是包含结构化数据的XML...

    纯html标签静态调用xml文件及xsl对xml文件的的显示修饰

    这个XSL模板将遍历XML文件中的所有一级子元素,将它们的名称和值分别显示在表格的两列中。`&lt;xsl:for-each&gt;`标签用于迭代处理,`&lt;xsl:value-of&gt;`则用于获取元素的值。 为了将XML与XSL结合,我们需要在HTML中引用XSL...

    xml xsl网页生成

    XML(可扩展标记语言)和XSL(可扩展样式表语言)是Web开发中的核心技术,它们主要用于数据的结构化表示和格式化展示。XML是一种标记语言,它允许开发者定义自己的标签来描述数据,使得数据更加结构化,易于解析和...

    用xml.xsl 写的课程表

    标题中的“用xml.xsl 写的课程表”指的是使用XML(可扩展标记语言)和XSL(可扩展样式表语言)技术创建的课程表应用。XML是一种用于标记数据的语言,它允许数据以结构化的方式表示,而XSL则是一种转换XML文档的样式...

    CSS、XSL显示XML实验报告 报告+实验代码+截图+心得

    本次实验旨在通过实际操作,让学生理解并掌握如何利用CSS(层叠样式表)和XSL(可扩展样式语言)来显示XML文件。具体目标包括: - **理解CSS与XSL在处理XML数据时的不同之处**:CSS更侧重于样式的表现,而XSL则是一...

    ASP.NET通过xsl把xml转化为xhtml

    在处理XML数据时,ASP.NET提供了强大的工具和功能,其中之一就是使用XSL(Extensible Stylesheet Language)转换XML文档为XHTML。XSL是一种样式表语言,用于转换XML文档的结构和内容,使其能以不同的格式呈现,如...

    Xsl参考(pdf)

    `&lt;xsl:apply-templates&gt;` 是XSLT中最常用和最核心的元素之一,它负责应用匹配选择的模板。此元素允许你指定一组模板应该应用于哪些节点,从而控制XSLT转换的流程。 **语法:** ```xml &lt;xsl:apply-templates select=...

    跟我学XSL

    ### XSL基础知识详解 #### 一、XML与XSL的关系 随着互联网技术的快速发展,信息交换、检索和存储的需求日益...通过上述内容的学习,我们可以更好地理解和使用XSL来处理和转换XML文档,从而实现数据的有效管理和利用。

    xsl入门教程

    &lt;h2&gt;&lt;xsl:value-of select="resume/name"/&gt;&lt;/h2&gt; 性别 &lt;td&gt;&lt;xsl:value-of select="resume/sex"/&gt; 生日 &lt;td&gt;&lt;xsl:value-of select="resume/birthday"/&gt; 技能 &lt;td&gt;&lt;xsl:value-of select="resume/...

    XML实现网上商品的介绍界面——以购买鼠标为例

    例如,我们创建一个`mouse.xsl`文件来定义样式和布局: ```xslt &lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt; &lt;xsl:template match="/"&gt; &lt;h1&gt;&lt;xsl:value-of select="/...

    Xsl与xml结合Xsl与xml结合

    XML和XSL的结合使用,使得数据的表示和数据本身分离,极大地提高了数据的重用性和可读性。通过XSL,我们可以根据需要改变XML数据的展现形式,这对于数据的呈现和交互非常有帮助。 在"Xsl与xml结合"的场景下,`bbs....

    [xslt]xml文件

    在实际应用中,XSLT通常与XML解析器一起使用,如SAX或DOM解析器,来读取XML文件并执行转换。开发工具如Apache Xalan、Saxon等可以帮助开发者编写和测试XSLT样式表。 总结来说,XSLT和XML的结合为数据处理提供了一种...

    javascript xml xsl取值及数据修改第1/2页

    在给定的场景中,我们需要探讨如何使用JavaScript操作XML文档以及如何应用XSL进行数据的取值和修改。 首先,让我们看看如何在JavaScript中读取XML文档。在浏览器环境中,可以使用`DOMParser`对象解析XML字符串成DOM...

    struts2框架XSLTResult本地文件代码执行漏洞1

    漏洞的根源在于,Struts2框架在处理XSLTResult时,没有对用户提交的文件路径进行严格的验证和过滤,允许攻击者提供任意的文件路径。攻击者可以通过上传一个包含恶意XSLT代码的文件(如示例中的`.gif`文件),并在...

    Xslt语法参考手册.pdf

    - **定义与用法**:`&lt;xsl:apply-imports&gt;` 元素用于执行那些从其他样式表文件中导入的模板。当在一个XSLT样式表中使用 `&lt;xsl:import&gt;` 元素导入另一个样式表时,该元素可以被用来调用导入样式表中的模板。 - **...

    xml转换html

    3. 可解析性:XML有严谨的语法规则,这使得解析器可以准确地解析和理解XML文档。 4. 与平台和语言无关:XML是独立于任何特定编程语言的,可以在不同的操作系统和编程环境中使用。 HTML的特性: 1. 显示导向:HTML...

    ecside所需的jar文件

    开发者可以使用XSL-FO(Extensible Stylesheet Language - Formatting Objects)语言来描述文档的版面设计,然后通过FOP将这种描述转化为PDF文件,非常适合生成高质量的打印输出或者电子文档。 在压缩包文件列表中...

    HBBXMain_xslt_

    在Oxygen中,你可以打开"HBBXMain.xsl"文件,查看和编辑模板规则,直观地看到转换过程,以及预览结果。编辑器还支持XSLT调试,可以设置断点,逐行执行代码,查看变量值,帮助开发者定位问题。 在页面模板制作中,...

    跟我学XSL(一)

    XSL由三部分组成:XSLT(XSL Transformations)、XPath(XML Path Language)和XSL-FO(XSL Formatting Objects)。在“跟我学XSL(一)”这个主题中,我们将主要探讨XSLT和XPath,这两者是XSL的核心部分。 XSLT是一...

Global site tag (gtag.js) - Google Analytics