XML(Extensible Markup Language)은 일종의 W3C 표준처럼 보일 수 있습니다. 현재는 실질적인 영향이 없으며 나중에 유용하더라도 오래 전의 일입니다. 그러나 실제로는 이미 사용되고 있습니다. 따라서 즐겨 사용하는 HTML 편집기에 XML이 추가되어 사용을 시작할 때까지 기다리지 마십시오. 이제 다양한 내부 문제와 B2B 시스템 문제를 해결할 수 있습니다.
sparks.com에서는 xml을 사용하여 Java 개체에서 HTML 데이터 표시에 이르기까지 다양한 시스템 간의 데이터 표현을 표준화합니다.
특히, 매우 기본적인 xml 구조로 표준화되면 데이터를 공유하고 조작하기가 더 쉽다는 사실을 발견했습니다. 그 과정에서 우리는 XML을 사용하는 여러 가지 효과적인 방법을 발견했습니다. 다음은 현재 애플리케이션에 대해 자세히 설명합니다.
표준화
xml을 사용하기 전에 사용하려는 정보와 다른 xml 데이터 형식을 만드세요.
동적 xml 생성
데이터베이스에서 html을 생성하는 것은 새로운 것이 아니지만 xml을 생성하는 것은 새로운 일입니다. 여기서는 구체적인 생성 단계를 소개합니다.
xsl을 템플릿 언어로 사용
XSL(Extensible Stylesheet Language)은 XML 데이터 표시 형식을 정의하는 좋은 방법입니다. 여러 정적 템플릿에 작성하면 더 효과적입니다.
html
xml을 생성하고 xsl을 더하면 html이 됩니다. 이것은 옳지 않게 들릴 수도 있지만 사용자가 보는 HTML 페이지는 실제로 xml과 xsl의 결과입니다.
1. 표준화
XML의 힘은 유연성에서 나옵니다. 그러나 불행하게도 때로는 너무 유연해서 문제 해결 방법이 궁금할 정도로 빈 페이지가 남게 됩니다.
모든 XML 프로젝트에서 첫 번째 단계는 표준 데이터 형식을 만드는 것입니다. 이를 위해서는 다음과 같은 결정을 내려야 합니다:
• 어떤 데이터를 포함시킬 것인가?
• dtd(파일 유형 정의)를 사용할 것인가? dom(Document Object Model) 또는 SAX(Simplified API for XML) 구문 분석을 사용하려면
표준 XML 형식이 없기 때문에 개발자는 자신만의 형식을 자유롭게 개발할 수 있습니다. 그러나 형식이 하나의 응용 프로그램에서만 인식되는 경우 해당 응용 프로그램만 실행하여 형식을 사용할 수 있습니다. XML 형식을 읽을 수 있는 다른 프로그램이 있다면 분명히 더 도움이 될 것입니다. XML 형식이 수정되면 이를 사용하는 시스템도 수정해야 할 수 있으므로 형식을 최대한 완벽하게 구축해야 합니다. 대부분의 시스템은 인식하지 못하는 태그를 무시하기 때문에 XML 형식을 변경하는 가장 안전한 방법은 태그를 수정하는 것이 아니라 추가하는 것입니다.
sparks.com에서는 dtd가 필요하지 않기 때문에 단지 올바른 xml이 아닌 잘 구성된 xml을 사용합니다. DTD는 사용자가 페이지를 클릭하고 보는 사이에 처리 계층을 추가합니다. 우리는 이 레이어에 너무 많은 처리가 필요하다는 것을 발견했습니다. 물론 XML 형식으로 다른 회사와 통신할 때 DTD를 사용하는 것은 여전히 좋은 일입니다. dtd는 보내고 받을 때 데이터 구조가 올바른지 확인할 수 있기 때문입니다.
이제 여러 가지 파싱 엔진을 사용할 수 있습니다. 어떤 것을 선택하느냐는 거의 전적으로 애플리케이션 요구 사항에 따라 달라집니다. DTD를 사용하기로 결정한 경우 구문 분석 엔진은 XML이 DTD에 의해 확인되도록 할 수 있어야 합니다. 유효성 검사를 별도의 프로세스에 넣을 수 있지만 이는 성능에 영향을 미칩니다.
• 서블릿은 xml 문서 생성 작업을 Enterprise Javabean(ejb)으로 오프로드하여 제품 정보 요청을 처리합니다.
• ejb는 jdbc를 사용하여 데이터베이스에서 필요한 제품 세부정보를 쿼리합니다.
• ejb는 xml 파일을 생성하여 서블릿에 전달합니다.
• 서블릿은 구문 분석 엔진을 호출하여 xml 파일과 정적 xsl 스타일 시트에서 html 출력을 생성합니다.
(메소드 및 클래스 적용에 대한 자세한 내용은.
xml 생성 프로세스를 시작하는 코드는 ejb 메소드에 배치됩니다. 이 인스턴스는 생성된 xml 문자열을 저장하기 위해 문자열 버퍼를 즉시 생성합니다.
stringbuffer xml = new stringbuffer(); xml.append(xmlutils.begindocument("/browse_find/browse.xsl", "browse", request)); xml.append(product.toxml()); xml.append(xmlutils.enddocument("browse"); out.print(xml.tostring());
파일 헤더 생성
첫 번째 추가 메소드는 xmlutils 클래스를 호출하여 xml 파일 헤더를 생성합니다. Java 서블릿의 코드는 다음과 같습니다.public static string begindocument(string stylesheet, string page) { stringbuffer xml = new stringbuffer(); xml.append("<?xml version=\"1.0\"?>\n") .append("<?xml-stylesheet href=\"") .append(stylesheet).append("\"") .append(" type =\"text/xsl\"?>\n"); xml.append("<").append(page).append(">\n"); return xml.tostring(); }
파일 헤더를 완성한 후 제어 메서드는 java 개체를 호출하여 해당 xml을 생성합니다. 이 예에서는 제품 개체가 호출됩니다. 제품 객체는 두 가지 방법을 사용하여 XML 표현을 생성합니다. 첫 번째 메소드 toxml()은
public string toxml() { stringbuffer xml = new stringbuffer("<product>\n"); xml.append(internalxml()); xml.append("</product>\n"); return xml.tostring(); } public string internalxml() { stringbuffer xml = new stringbuffer("\t") .append(producttype).append("\n"); xml.append("\t").append(idvalue.trim()) .append("\n"); xml.append("\t").append(idname.trim()) .append("\n"); xml.append("\t").append(page.trim()) .append("\n"); 厖? xml.append("\t").append(amount).append("\n"); xml.append("\t").append(vendor).append("\n"); xml.append("\t\n"); xml.append("\t").append(pubdesc).append("\n"); xml.append("\t").append(vendesc).append("\n"; 厖? return xml.tostring(); }
3. xsl을 템플릿 언어로 사용
xsl 템플릿의 시작 부분은 아래 코드와 유사합니다. 코드의 첫 번째 줄은 필수이며 이 파일을 xsl 스타일 시트로 정의합니다. xmlns:xsl= 속성은 이 파일에서 사용되는 xml 네임스페이스를 참조하고, version= 속성은 네임스페이스의 버전 번호를 정의합니다. 파일 끝에서 태그를 닫습니다.
태그는
로 닫아야 합니다.<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="basketpage"> <html> <head> <title>shopping bag / adjust quantity</title> </head> <body bgcolor="#cccc99" bgproperties="fixed" link="#990000" vlink="#990000"> <br> ?br> </xsl:template> </xsl:stylesheet>
choose
이 예에서 when 태그는 xml에서 수량 태그를 확인합니다. 수량 태그에 값이 true인 오류 속성이 포함되어 있으면 수량 태그에 아래 나열된 테이블 셀이 표시됩니다. 속성 값이 true가 아닌 경우 xsl은 다른 태그 사이에 내용을 표시합니다. 다음 예에서는 error 속성이 true가 아닌 경우 아무것도 표시되지 않습니다.
<xsl:choose> <xsl:when test="quantity[@error='true']"> <td bgcolor="#ffffff"><img height="1" width="1" src="http://img.sparks.com/images/i-catalog/sparks_images/sparks_ui/clearpixel.gif"/></td> <td valign="top" bgcolor="#ffffff" colspan="2"> <font face="verdana, arial" size="1" color="#cc3300"><b>*not enough in stock. your quantity was adjusted accordingly.</b> </font></td> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose>
<xsl:for-each select="package"> <xsl:apply-templates select="product"/> </xsl:for-each>
for-each 循环在程序遇到标签时开始。这个循环将在程序遇到标签时结束。一旦这个循环运行,每次标签出现时都会应用这个模板。
四、生成html
将来的某一时刻,浏览器将会集成xml解析引擎。到那时,你可以直接向浏览器发送xml和xsl文件,而浏览器则根据样式表中列出的规则显示xml数据。不过,在此之前开发者们将不得不在他们服务器端的系统里创建解析功能。
在sparks.com,我们已经在java servlet里集成了一个xml解析器。这个解析器使用一种称为xslt (xsl transformation)的机制,按xsl标签的说明向xsl模板中添加xml数据。
当我们的java servlet处理http请求时,servlet检索动态生成的xml,然后xml被传给解析引擎。根据xml文件中的指令,解析引擎查找适当的xsl样式表。解析器通过dom结构创建html文件,然后这个文件再传送给发出http请求的用户。
如果你选择使用sax模型,解析器会通读xml源程序,为每个xml标签创建一个事件。事件与xml数据对应,并最终按xsl标签向样式表中插入数据。
以上就是用XML和XSL来生成动态页面的内容,更多相关内容请关注PHP中文网(www.php.cn)!