
XML(可扩展标记语言)可能看起来像某种W3C标准-现在没有真正的影响,即使以后会派上用场,也要等很长时间. 但实际上,它现已被应用. 因此,在开始使用XML之前,请不要等待XML添加到您喜欢的HTML编辑器中. 现在,它可以解决各种内部问题和B2B系统问题.
在Sparks.com,我们使用XML标准化从Java对象到HTML数据显示的不同系统之间的数据表示.
特别重要的一点是,我们发现,只要标准化基于非常基本的XML结构,共享和操作数据就变得更加容易. 在此过程中,我们发现了许多使用XML的有效方法. 下面详细介绍我们当前的应用程序.
标准化
在使用XML之前,请创建与您要使用的信息不同的XML数据格式.
生成动态XML
从生成HTML并不是什么新鲜事,但是生成XML却很新. 这里我们介绍具体的生成步骤.
使用XSL作为模板语言
XSL(可扩展样式表语言)是定义XML数据显示格式的好方法. 如果将其编写为多个静态模板,将会更加有效.
生成HTML
XML加XSL等于HTML. 这听起来可能是错误的,但是用户在HTML页面上看到的实际上是XML和XSL的综合效果.
I. 标准化
XML的强大之处在于其灵活性. 不幸的是,有时它太灵活了,以至于您将面临空白页,担心如何解决该问题.
在任何XML项目中,第一步都是创建标准数据格式. 为此,您必须做出以下决定:
&&&
识别数据:
由于没有标准的XML格式,开发人员可以自由地开发自己的格式. 但是,如果您的格式只能被一个应用程序识别,则只能运行此程序以使用该格式. 如果还有其他程序可以读取您的XML格式,那么显然会更有帮助. 如果修改了XML格式
更改后,使用它的系统可能也需要修改,因此您应该构建尽可能完整的格式. 由于大多数系统都会忽略无法识别的标签,因此更改XML格式的最安全方法是添加标签,而不是对其进行修改.
点击此处查看XML数据格式示例
在Sparks.com,我们查看了不同产品展示所需的所有产品数据. 尽管并非所有页面都使用所有数据,但是我们为所有数据开发了非常完整的XML数据格式. 例如,我们的产品详细信息页面显示的数据比产品浏览页面更多. 但是,在这两种情况下,我们仍然使用相同的数据格式,因为每个页面的XSL模板仅使用其所需的字段.
是否使用DTD
在Sparks.com,我们使用组织良好的XML而不是正确的XML,因为前者不需要DTD. DTD在用户单击和查看页面之间添加了一个处理层. 我们发现该层需要太多处理. 当然,在与其他公司进行XML格式的通信时,最好使用DTD. 因为DTD可以确保发送和接收时数据结构正确.
选择解析引擎
有几种可用的解析引擎. 您选择哪一个几乎完全取决于您的应用程序需求. 如果您决定使用DTD,则此解析引擎必须使您的XML能够被DTD验证. 您可以将验证放在另一个过程中,但这会影响性能.
SAX和DOM是两个基本的分析模型. SAX基于事件,因此在解析XML时jsp网页模板,会将事件发送到引擎. 接下来,事件与输出文件同步. DOM解析引擎为动态XML数据和XSL样式表建立了分层的树结构. 通过随机访问DOM树,可以提供XSL样式表确定的XML数据. 关于SAX模型的争论主要集中在DOM结构内存的过度减少和XSL样式表解析时间的加速上.

但是,我们发现许多使用SAX的系统尚未充分利用其功能. 这些系统使用它来构建DOM结构并通过DOM结构发送事件. 这样,必须在处理任何XML之前从样式表构建DOM,这样会降低性能.
第二,生成动态XML
建立XML格式后,我们需要一种从动态迁移它的方法.
生成XML文档相对简单,因为它只需要一个可以处理字符串的系统. 我们已经使用Java Servlet,Enterprise JavaBean服务器,JDBC和RDBMS(关系管理系统)建立了一个系统.
&&&&
(有关XSL应用程序的其他信息,请参考XSL作为模板语言. )
生成XML的示例
在Java中创建XML文档字符串的实际代码可以分为几种方法和类.
开始XML生成过程的代码放在EJB方法中. 该实例将立即创建一个StringBuffer来存储生成的XML字符串.
StringBuffer xml = new StringBuffer();
xml.append(XmlUtils.beginDocument(“ / browse_find / browse.xsl”,“浏览”,请求));
xml.append(product.toXml());
xml.append(XmlUtils.endDocument(“ browse”);
out.print(xml.toString());
以下三个xml.append()参数本身就是对其他方法的调用.
生成文件头
第一个附加方法调用XmlUtils类以生成XML文件头. 我们的Java Servlet中的代码如下:
公共静态字符串beginDocument(字符串样式表,字符串页面)
{
StringBuffer xml = new StringBuffer();
xml.append(“ <?xml version =” 1.0“?>”)
.append(“ <?xml-stylesheet href =”“)
.append(stylesheet).append(“”“)
.append(“ type =” text / xsl“?>”);
xml.append(“ <”). append(page).append(“>”);

返回xml.toString();
}
此代码生成XML文件头. <?xml>标记将此文件定义为支持1.0版的XML文件. 第二行代码指向正确的样式表的位置以显示数据. 最后包括项目级标签(在此示例中为
<?xml version =“ 1.0”?> <?xml-stylesheet href =“ / browse_find / browse.xsl” type =“ text / xsl”?>
填写产品信息
完成文件头后,控制方法将调用Java对象以生成其XML. 在这种情况下,将调用产品对象. 产品对象使用两种方法来生成其XML表示形式. 第一种方法toXML()通过生成
公共字符串toXml()
{
StringBuffer xml =新的StringBuffer(“
xml.append(internalXml());
xml.append(“ product>”);
返回xml.toString();
}
公共字符串internalXml()
{
StringBuffer xml =新
StringBuffer(“”)
.append(productType).append(“”);
xml.append(“”).append(idValue.trim())
.append(“”);
xml.append(“”).append(idName.trim())
.append(“”);
xml.append(“”).append(page.trim())
.append(“”);
xml.append(“”).append(金额).append(“”);

xml.append(“”).append(供应商).append(“”);
xml.append(“”);
xml.append(“”).append(pubDesc).append(“”);
xml.append(“”).append(venDesc).append(“”;
返回xml.toString();
}
关闭文件
最后,调用XMLUtils.endDocument()方法. 此调用关闭XML标记(在这种情况下),最后完成结构良好的XML文件. 控制方法中的整个StringBuffer也会转换为字符串,并返回给处理初始HTTP请求的servlet.
三,使用XSL作为模板语言
为了获得HTML输出,我们将生成的XML文件与控制XML数据表示方式的XSL模板结合在一起. 我们的XSL模板包含精心组织的XSL和HTML标记.
开始构建模板
我们的XSL模板的开头类似于以下代码. 代码的第一行是必需的代码,它将此文件定义为XSL样式表. xmlns: xsl =该属性引用此文件中使用的XML名称空间,而version =属性定义该名称空间的版本号. 在文件末尾jsp网页模板,我们关闭标签.
以
接下来,让我们看一下组织良好的HTML. 由于它将由XML解析引擎处理,因此它必须符合组织良好的XML的所有规则. 本质上,这意味着所有开始标签必须具有相应的结束标签. 例如,
通常没有关闭的标签必须用
关闭
.
version =“ 1.0”>
head>

xsl: template>
xsl: stylesheet>
在模板的主体中,有许多XSL标记用于提供数据表示的逻辑. 以下是这两个常用标签的说明.
选择
The
在此示例中,when标签将检查XML的数量标签. 如果数量标签包含值为true的错误属性,则数量标签将显示在下面列出的表格单元格中. 如果该属性的值不为true,则XSL将在else标签之间显示内容. 在下面的示例中,如果error属性不为true,则不会显示任何内容.
td>
xsl: when>
xsl: otherwise>
xsl: choose>
对于每个人
The
xsl: for-each>
当程序遇到标签时,for-each循环开始. 当程序遇到标签时,此循环将结束. 循环运行后,每次出现标签时都会应用此模板.
四,生成HTML
在将来的某个时候,浏览器将集成一个XML解析引擎. 在此之前,您可以将XML和XSL文件直接发送到浏览器,然后浏览器根据样式表中列出的规则显示XML数据. 但是,在此之前,开发人员必须在其服务器端系统中创建解析功能.
在Sparks.com,我们已经在Java servlet中集成了XML解析器. 该解析器使用一种称为XSLT(XSL转换)的机制,根据XSL标记的指示将XML数据添加到XSL模板中.
当我们的Java servlet处理HTTP请求时,该servlet检索动态生成的XML,然后将其传递给解析引擎. 根据XML文件中的指令,解析引擎将查找适当的XSL样式表. 解析器通过DOM结构创建一个HTML文件,然后将该文件传输给发出HTTP请求的用户.
如果选择使用SAX模型,则解析器将通读XML源程序并为每个XML标签创建一个事件. 该事件对应于XML数据,最后根据XSL标签将数据插入样式表中.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-277343-1.html
强行驱离