自从javaei网站推出h2p以来,得到了很多人的支持和鼓励,也给出了很多宝贵意见,再次深表谢意。
这些意见主要是三个方面的问题。第一:为什么要生成pdf;第二:h2p文件分成两个,比较繁琐,为什么不合成一个;第三:h2p-tool由c#和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对该样例文件的解析效果如图:
层次结构的深度是没有限制的,h2p的xsl实现了对xml的解析和树节点的构造,如果对这方面的问题感兴趣的可以参考我这个xsl。合作网站可以提供自己的xsl。Xsl解析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
分享到:
相关推荐
在实际应用中,我们可以使用XML解析器(如Java的DOM或SAX解析器)读取XML文档,然后结合XSLT处理器(如Saxon或Xalan)和XSL样式表进行转换,生成HTML页面供浏览器展示。例如,`test.xml`可能是包含结构化数据的XML...
这个XSL模板将遍历XML文件中的所有一级子元素,将它们的名称和值分别显示在表格的两列中。`<xsl:for-each>`标签用于迭代处理,`<xsl:value-of>`则用于获取元素的值。 为了将XML与XSL结合,我们需要在HTML中引用XSL...
XML(可扩展标记语言)和XSL(可扩展样式表语言)是Web开发中的核心技术,它们主要用于数据的结构化表示和格式化展示。XML是一种标记语言,它允许开发者定义自己的标签来描述数据,使得数据更加结构化,易于解析和...
标题中的“用xml.xsl 写的课程表”指的是使用XML(可扩展标记语言)和XSL(可扩展样式表语言)技术创建的课程表应用。XML是一种用于标记数据的语言,它允许数据以结构化的方式表示,而XSL则是一种转换XML文档的样式...
本次实验旨在通过实际操作,让学生理解并掌握如何利用CSS(层叠样式表)和XSL(可扩展样式语言)来显示XML文件。具体目标包括: - **理解CSS与XSL在处理XML数据时的不同之处**:CSS更侧重于样式的表现,而XSL则是一...
在处理XML数据时,ASP.NET提供了强大的工具和功能,其中之一就是使用XSL(Extensible Stylesheet Language)转换XML文档为XHTML。XSL是一种样式表语言,用于转换XML文档的结构和内容,使其能以不同的格式呈现,如...
`<xsl:apply-templates>` 是XSLT中最常用和最核心的元素之一,它负责应用匹配选择的模板。此元素允许你指定一组模板应该应用于哪些节点,从而控制XSLT转换的流程。 **语法:** ```xml <xsl:apply-templates select=...
### XSL基础知识详解 #### 一、XML与XSL的关系 随着互联网技术的快速发展,信息交换、检索和存储的需求日益...通过上述内容的学习,我们可以更好地理解和使用XSL来处理和转换XML文档,从而实现数据的有效管理和利用。
<h2><xsl:value-of select="resume/name"/></h2> 性别 <td><xsl:value-of select="resume/sex"/> 生日 <td><xsl:value-of select="resume/birthday"/> 技能 <td><xsl:value-of select="resume/...
例如,我们创建一个`mouse.xsl`文件来定义样式和布局: ```xslt <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <h1><xsl:value-of select="/...
XML和XSL的结合使用,使得数据的表示和数据本身分离,极大地提高了数据的重用性和可读性。通过XSL,我们可以根据需要改变XML数据的展现形式,这对于数据的呈现和交互非常有帮助。 在"Xsl与xml结合"的场景下,`bbs....
在实际应用中,XSLT通常与XML解析器一起使用,如SAX或DOM解析器,来读取XML文件并执行转换。开发工具如Apache Xalan、Saxon等可以帮助开发者编写和测试XSLT样式表。 总结来说,XSLT和XML的结合为数据处理提供了一种...
在给定的场景中,我们需要探讨如何使用JavaScript操作XML文档以及如何应用XSL进行数据的取值和修改。 首先,让我们看看如何在JavaScript中读取XML文档。在浏览器环境中,可以使用`DOMParser`对象解析XML字符串成DOM...
漏洞的根源在于,Struts2框架在处理XSLTResult时,没有对用户提交的文件路径进行严格的验证和过滤,允许攻击者提供任意的文件路径。攻击者可以通过上传一个包含恶意XSLT代码的文件(如示例中的`.gif`文件),并在...
- **定义与用法**:`<xsl:apply-imports>` 元素用于执行那些从其他样式表文件中导入的模板。当在一个XSLT样式表中使用 `<xsl:import>` 元素导入另一个样式表时,该元素可以被用来调用导入样式表中的模板。 - **...
3. 可解析性:XML有严谨的语法规则,这使得解析器可以准确地解析和理解XML文档。 4. 与平台和语言无关:XML是独立于任何特定编程语言的,可以在不同的操作系统和编程环境中使用。 HTML的特性: 1. 显示导向:HTML...
开发者可以使用XSL-FO(Extensible Stylesheet Language - Formatting Objects)语言来描述文档的版面设计,然后通过FOP将这种描述转化为PDF文件,非常适合生成高质量的打印输出或者电子文档。 在压缩包文件列表中...
在Oxygen中,你可以打开"HBBXMain.xsl"文件,查看和编辑模板规则,直观地看到转换过程,以及预览结果。编辑器还支持XSLT调试,可以设置断点,逐行执行代码,查看变量值,帮助开发者定位问题。 在页面模板制作中,...
XSL由三部分组成:XSLT(XSL Transformations)、XPath(XML Path Language)和XSL-FO(XSL Formatting Objects)。在“跟我学XSL(一)”这个主题中,我们将主要探讨XSLT和XPath,这两者是XSL的核心部分。 XSLT是一...