|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不得不提一下的是:.net是看到java红,而开发出来的工具。js|xml
XML(可扩大标志言语)看起来大概像某种W3C尺度――如今没有甚么实践影响,即便今后能派上用处,也是好久今后的事。但实践上,它如今已失掉了使用。以是,不要比及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配合发生的效果。
1、尺度化
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被剖析时,事务被发送给引擎。接上去,事务与输入文件同步。DOM剖析引擎为静态XML数据和XSL款式表创建条理树状布局。经由过程随机会见DOM树,能够供应XML数据,就象由XSL款式表来决意一样。SAX模子上的争辩次要会合于对DOM布局的内存下降过分和加速XSL款式表剖析工夫延长方面。
但是,我们发明利用SAX的良多体系并没有充实发扬它的才能。这些体系用它来创建DOM布局并经由过程DOM布局来发送事务。用这类办法,在任何XML处置之前必需从款式表中创建DOM,以是功能会下落。
2、天生静态XML
一旦创建了XML格局,我们必要一种可以将其从数据库中静态移植的办法。
天生XML文档绝对来讲对照复杂,由于它只必要一个能够处置字符串的体系。我们创建了一个利用JavaServlet、EnterpriseJavaBeanserver、JDBC和RDBMS(干系型数据库办理体系)的体系。
&&&&
(有关XSL使用的其他信息,请参阅用XSL作为模板言语。)
天生XML的例子
在Java中创立XML文档字符串的真正代码能够分红几个办法和类。
启动XML天生历程的代码放在EJB办法里。这一实例会当即创立一个StringBuffer,以便存储天生的XML字符串。
StringBufferxml=newStringBuffer();
xml.append(XmlUtils.beginDocument("/browse_find/browse.xsl","browse",request));
xml.append(product.toXml());
xml.append(XmlUtils.endDocument("browse");
out.print(xml.toString());
前面的三个xml.append()变元自己就是对其他办法的挪用。
发生文件头
第一个附加办法挪用XmlUtils类来发生XML文件头。我们的JavaServlet中的代码以下:
publicstaticStringbeginDocument(Stringstylesheet,Stringpage)
{
StringBufferxml=newStringBuffer();
xml.append("<?xmlversion="1.0"?>")
.append("<?xml-stylesheethref="")
.append(stylesheet).append(""")
.append("type="text/xsl"?>");
xml.append("<").append(page).append(">");
returnxml.toString();
}
这段代码天生了XML文件头。<?xml>标签把本文件界说为撑持1.0版本的XML文件。第二行代码指向用以显现数据的准确款式表的地位。最初包含出来的是项级标签(本实例中为<browse>)。在文件开端,只要<browse>标签必要被封闭。
<?xmlversion="1.0"?><?xml-stylesheethref="/browse_find/browse.xsl"type="text/xsl"?><browse>
填进产物信息
完成了文件头后,把持办法会挪用Java对象来发生它的XML。本例中挪用的是product对象。product对象利用两个办法来发生它的XML暗示。第一个办法toXML()经由过程发生<product>和</product>标签来创建product节点。然后它会挪用internalXML(),如许就可以供应产物XML所需的内容。internalXML()是一系列的StringBuffer.append()挪用。StringBuffer也被转换成字符串并前往给把持办法。
publicStringtoXml()
{
StringBufferxml=newStringBuffer("<product>");
xml.append(internalXml());
xml.append("</product>");
returnxml.toString();
}
publicStringinternalXml()
{
StringBufferxml=new
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(amount).append("");
xml.append("").append(vendor).append("");
xml.append("");
xml.append("").append(pubDesc).append("");
xml.append("").append(venDesc).append("";
?
returnxml.toString();
}
封闭文件
最初,XMLUtils.endDocument()办法被挪用。这个挪用封闭XML标签(本例中为),并终极完成架构好的XML文件。来自把持办法的全部StringBuffer也转换成字符串,并前往给处置最后HTTP哀求的servlet。
3、用XSL作为模板言语
为了失掉HTML输入,我们把天生的XML文件和把持XML数据怎样暗示的XSL模板相分离。我们的XSL模板由经心构造的XSL和HTML标签构成。
入手下手建模板
我们的XSL模板入手下手部分与上面这段代码相似。第一行代码为必须代码,将本文件界说为XSL款式表。xmlns:xsl=属性援用本文件所利用的XML称号空间,而version=属性则界说称号空间的版本号。在文件的开端,我们封闭标签。
由<xsl:template>入手下手的第二行代码断定了XSL模板的形式。Match属性是必须的,在这里指向XML标签<basketPage>。在我们的体系里,<basketPage>标签里包括<product>标签,这使得XSL模板能够会见嵌在<product>标签内的产物信息。我们又一次必需在文件开端封闭<xsl:template>标签。
接上去,我们来看一看构造优秀的HTML。因为它将被XML剖析引擎处置,以是必需切合构造优秀的XML的一切划定规矩。从实质下去讲,这意味着一切的入手下手标签必需有对应的停止标签。比方,一般不被停止的<P>标签,必需用</P>封闭。
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:templatematch="basketPage">
<html>
<head>
<title>ShoppingBag/AdjustQuantity</title>
</head>
<bodybgcolor="
</xsl:template>
</xsl:stylesheet>
在模板的主体内,有良多XSL标签被用于为数据暗示供应逻辑。上面注释两个经常使用的标签。
Choose
<xsl:choose>标签相似于传统编程言语中if-then-else布局的入手下手部分。在XSL中,choose标签暗示在代码进进的部分中,赋值将触动员作的产生。具有赋值属性的<xsl:when>标签跟在choose标签前面。假如赋值是准确的,位于<xsl:when>的入手下手和停止标签之间的内容将被利用。假如赋值毛病,就利用<xsl:otherwise>的入手下手和停止标签之间的内容。全部部分用</xsl:choose>来停止。
在这个例子里,when标签会为quantity标签反省XML。假如quantity标签里含有值为真的error属性,quantity标签将会显现列鄙人面的表格单位。假如属性的值不为真,XSL将会显现otherwise标签间的内容。鄙人面的实例里,假如error属性不真,则甚么都不会被显现。
<xsl:choose>
<xsl:whentest="quantity[@error=true]">
<tdbgcolor="src=http://www.163design.net/j/jsl/"http://img.sparks.com/Images/I-Catalog/sparks_images/sparks_ui/clearpixel.gif"/></td>
<tdvalign="top"bgcolor="<fontface="Verdana,Arial"size="1"color="<b>*Notenoughinstock.Yourquantitywasadjustedaccordingly.</b></font>
</td>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
For-each
<xsl:for-each>标签能够用来对类似XML数据的多种情形使用统一个款式表。关于我们来讲,能够从数据库中掏出一系列产物信息,并在Web页长进行一致格局化。这里有一个例子:
<xsl:for-eachselect="package">
<xsl:apply-templatesselect="product"/>
</xsl:for-each>
for-each轮回在程序碰到标签时入手下手。这个轮回将在程序碰到标签时停止。一旦这个轮回运转,每次标签呈现时城市使用这个模板。
4、天生HTML
未来的某一时候,扫瞄器将会合成XML剖析引擎。到当时,你能够间接向扫瞄器发送XML和XSL文件,而扫瞄器则依据款式表中列出的划定规矩显现XML数据。不外,在此之前开辟者们将不能不在他们服务器真个体系里创立剖析功效。
在Sparks.com,我们已在Javaservlet里集成了一个XML剖析器。这个剖析器利用一种称为XSLT(XSLTransformation)的机制,按XSL标签的申明向XSL模板中增加XML数据。
当我们的Javaservlet处置HTTP哀求时,servlet检索静态天生的XML,然后XML被传给剖析引擎。依据XML文件中的指令,剖析引擎查找得当的XSL款式表。剖析器经由过程DOM布局创立HTML文件,然后这个文件再传送给收回HTTP哀求的用户。
假如你选择利用SAX模子,剖析器会通读XML源程序,为每一个XML标签创立一个事务。事务与XML数据对应,并终极按XSL标签向款式表中拔出数据。
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的 |
|