XML processing in ColdFusion MX

jellytrickInternet και Εφαρμογές Web

10 Νοε 2013 (πριν από 3 χρόνια και 11 μήνες)

69 εμφανίσεις

XML processing in ColdFusion MX

Everything you wanted to know about XML, but were afraid to ask

October 2006 Jaxfusion User Group

About the Presenter

»
David Fekke

»
Working with XML 1999

»
Lead for Vurv HR
-
XML API


Covered in this presentation

»
Properly formed XML

»
ColdFusion XML Tags and functions

»
XPath queries

»
XML XSDs and Validation

»
XML Namespaces

»
DOM vs. Streaming parsers

»
StAX API

XML

»
eXtensible Markup Language

»
Originated from SGML

»
W3C standard

»
More versatile then Flat files

XML Syntax

»
XML declaration

»
<?xml version="1.0" encoding="UTF
-
8"?>

»
Must have one root tag

»
<pre:roottag> </pre:roottag>

»
All tags must have closing tag.

»
<br />: single tags can have forward slash at
the end

»
<tag name=“value” /> tags can have attributes

Pre MX XML features

»
WDDX

»
SOXML custom tag, windows only

ColdFusion MX 6

»
CFXML tag turns serialized XML into a
ColdFusion object

»
XMLParse() function

»
ColdFusion XML Object works like series of
structures and arrays

»
XMLSearch() function

»
XMLSearch Uses XPath queries to return array
of XML nodes



XML Check functions

»
IsXML

»
IsXmlDoc


»
IsWDDX


»
IsXmlAttribute

»
IsXmlElem

»
IsXmlNode

»
IsXmlRoot


XML editing functions

»
XmlNew()

»
XmlChildPos
()

»
XmlNew
()

»
XmlTransform
()

»
XmlElemNew
()


ColdFusion MX 7 Functions

»
XmlGetNodeType
()

»
XmlValidate
()


XPath queries

»
Provides a way to pull the elements you need
without having to iterate through the entire
DOM

»
/rootelement/parent/childelement

»
//childelement

»
/rootelement/parent[childelement = “foo”]

»
Used with XSLT templates

XML Validation

»
Define XML with DTD or XSD

»
XSD preferred method for validation

»
XSD uses an XML format

»
Allows for strict and custom datatypes

»
Allows for pattern recognition

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">


<xs:element name="FirstName" type="xs:string"/>


<xs:element name="LastName" type="xs:string"/>


<xs:element name="Age" type="xs:string"/>


<xs:element name="customer">



<xs:complexType>




<xs:sequence>





<xs:element ref="FirstName" />





<xs:element ref="LastName" />





<xs:element ref="Age" />




</xs:sequence>



</xs:complexType>


</xs:element>


<xs:element name="customers">



<xs:complexType>




<xs:sequence>





<xs:element ref="customer"
maxOccurs="unbounded" />




</xs:sequence>



</xs:complexType>


</xs:element>

</xs:schema>

<?xml version="1.0" encoding="UTF
-
8" ?>

<customers>


<customer>


<FirstName>Dwight</FirstName>


<LastName>Mercer</LastName>


<Age>32</Age>


</customer>


<customer>


<FirstName>Miguel</FirstName>


<LastName>Cabrera</LastName>


<Age>33</Age>


</customer>

</customers>

Default XSD element types

»
xs:String

»
xs:normalizedString

»
xs:integer

»
xs:base64Binary

»
xs:negativeInteger

»
xs:positiveInteger

»
xs:Hexbinary

»
xs:Long

»
xs:short

Custom Types

<xsd:simpleType name="SKU">


<xsd:restriction base="xsd:string">



<xsd:pattern value="
\
d{3}
-
[A
-
Z]{2}"/>


</xsd:restriction>

</xsd:simpleType>

XML Namespaces

»
Namespaces allow for XML to be segmented
into different parts

»
<namespace:elementName /> namespace will
prefix the element name

»
<fekke:root xmlns:fekke=“http://www.fekke...

»
No namespace xmlns=“”

»
Use explicit XPath with no namespace

»
Nonamespace xpath=“/:element”

DOM, SAX and Pull Parsers

»
ColdFusion uses a DOM parser. Entire XML
object in memory.

»
SAX parser reads in file portion of the time.
Raises events when elements match.

»
StAX uses pull based parser to read one node at
time. Uses streams to read in portion

StAX

»
BEA JSR 173

»
Many implementations

»
Includes Event and Pull parsers

»
Jim Collins working on CFStAX library

»
Woodstox library extremely fast
implementation


StAX objects

»
XMLInputFactory

»
XMLStreamConstants

»
XMLStreamReader

»
XMLEventReader

XMLStreamConstants

»
Constants for different node types

»
XMLStreamConstants.START_ELEMENT

»
XMLStreamConstants.END_ELEMENT

»
XMLStreamConstants.START_DOCUMENT

»
XMLStreamConstants.END_DOCUMENT

XmlStreamReader methods

»
Next() iterates through XML stream

»
getLocalName() returns tag name

»
getAttributeCount() returns tags attribute count

»
getAttributeLocalName() returns attribute name

»
getAttributeValue() returns attribute value

»
hasText() returns boolean if element has text

»
getText() returns element text

Free XML Tools

»
IE and Firefox have built in DOM parsers

»
XMLFox for testing validation

»
XMLButterfly for editing and formatting XML

»
Don’t use ALtova XML Spy, its crap!

Summary

»
Use XMLSearch instead of iterating through DOM

»
Don’t use cfsavecontent to build XML, use CFXML

»
If using no namespace, use explicit xpaths

»
Use xmlFormat or CDATA to handle special
characters

»
Use XSDs over DTDs

Links

»
http://www.w3.org/XML/

»
http://www.w3.org/XML/Schema

»
http://www.xml.com/

»
http://coldfusion.sys
-
con.com/read/236002.htm



Books

»
ColdFusion Application Development

»
Beginning XML (Programmer to Programmer)

»
O’reilly XML in a Nutshell