source: icXML/icXML-devel/samples/src/SAX2Print/SAX2FilterHandlers.cpp @ 2726

Last change on this file since 2726 was 2726, checked in by cameron, 7 years ago

Add original Xerces tests and samples directories

File size: 5.8 KB
Line 
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/*
19 * $Id: SAX2FilterHandlers.cpp 672311 2008-06-27 16:05:01Z borisk $
20 */
21
22
23// ---------------------------------------------------------------------------
24//  Includes
25// ---------------------------------------------------------------------------
26#include "SAX2FilterHandlers.hpp"
27#include <xercesc/sax2/Attributes.hpp>
28
29struct Attr
30{
31    const XMLCh* qName;
32    const XMLCh* uri;
33    const XMLCh* localPart;
34    const XMLCh* value;
35    const XMLCh* attrType;
36};
37
38class AttrList : public Attributes, public RefVectorOf<Attr>
39{
40public:
41    AttrList(XMLSize_t count) : RefVectorOf<Attr>(count) {}
42
43    virtual XMLSize_t getLength() const
44    {
45        return size();
46    }
47
48    virtual const XMLCh* getURI(const XMLSize_t index) const
49    {
50        return elementAt(index)->uri;
51    }
52    virtual const XMLCh* getLocalName(const XMLSize_t index) const
53    {
54        return elementAt(index)->localPart;
55    }
56    virtual const XMLCh* getQName(const XMLSize_t index) const
57    {
58        return elementAt(index)->qName;
59    }
60    virtual const XMLCh* getType(const XMLSize_t index) const
61    {
62        return elementAt(index)->attrType;
63    }
64    virtual const XMLCh* getValue(const XMLSize_t index) const
65    {
66        return elementAt(index)->value;
67    }
68
69
70    virtual bool getIndex(const XMLCh* const uri,
71                          const XMLCh* const localPart,
72                          XMLSize_t& i) const
73    {
74        for(i=0;i<size();i++)
75            if(XMLString::equals(elementAt(i)->uri,uri) && XMLString::equals(elementAt(i)->localPart,localPart))
76                return true;
77        return false;
78    }
79
80    virtual int getIndex(const XMLCh* const uri, const XMLCh* const localPart ) const
81    {
82        for(XMLSize_t i=0;i<size();i++)
83            if(XMLString::equals(elementAt(i)->uri,uri) && XMLString::equals(elementAt(i)->localPart,localPart))
84                return (int)i;
85        return -1;
86    }
87
88    virtual bool getIndex(const XMLCh* const qName, XMLSize_t& i) const
89    {
90        for(i=0;i<size();i++)
91            if(XMLString::equals(elementAt(i)->qName,qName))
92                return true;
93        return false;
94    }
95
96    virtual int getIndex(const XMLCh* const qName ) const
97    {
98        for(XMLSize_t i=0;i<size();i++)
99            if(XMLString::equals(elementAt(i)->qName,qName))
100                return (int)i;
101        return -1;
102    }
103
104    virtual const XMLCh* getType(const XMLCh* const uri, const XMLCh* const localPart ) const
105    {
106        for(XMLSize_t i=0;i<size();i++)
107            if(XMLString::equals(elementAt(i)->uri,uri) && XMLString::equals(elementAt(i)->localPart,localPart))
108                return elementAt(i)->attrType;
109        return NULL;
110    }
111    virtual const XMLCh* getType(const XMLCh* const qName) const
112    {
113        for(XMLSize_t i=0;i<size();i++)
114            if(XMLString::equals(elementAt(i)->qName,qName))
115                return elementAt(i)->attrType;
116        return NULL;
117    }
118
119    virtual const XMLCh* getValue(const XMLCh* const uri, const XMLCh* const localPart ) const
120    {
121        for(XMLSize_t i=0;i<size();i++)
122            if(XMLString::equals(elementAt(i)->uri,uri) && XMLString::equals(elementAt(i)->localPart,localPart))
123                return elementAt(i)->value;
124        return NULL;
125    }
126    virtual const XMLCh* getValue(const XMLCh* const qName) const
127    {
128        for(XMLSize_t i=0;i<size();i++)
129            if(XMLString::equals(elementAt(i)->qName,qName))
130                return elementAt(i)->value;
131        return NULL;
132    }
133
134};
135
136// ---------------------------------------------------------------------------
137//  SAX2SortAttributesFilter: Constructors and Destructor
138// ---------------------------------------------------------------------------
139SAX2SortAttributesFilter::SAX2SortAttributesFilter(SAX2XMLReader* parent) : SAX2XMLFilterImpl(parent)
140{
141}
142
143SAX2SortAttributesFilter::~SAX2SortAttributesFilter()
144{
145}
146
147
148// ---------------------------------------------------------------------------
149//  SAX2SortAttributesFilter: Overrides of the SAX2XMLFilter interface
150// ---------------------------------------------------------------------------
151void SAX2SortAttributesFilter::startElement(const   XMLCh* const    uri,
152                                            const   XMLCh* const    localname,
153                                            const   XMLCh* const    qname,
154                                            const   Attributes&         attributes)
155{
156    AttrList sortedList(attributes.getLength());
157    for(XMLSize_t i=0;i<attributes.getLength();i++)
158    {
159        XMLSize_t j;
160        for(j=0;j<sortedList.getLength();j++)
161        {
162            if(XMLString::compareString(sortedList.elementAt(j)->qName,attributes.getQName(i))>=0)
163                break;
164        }
165        Attr* pClone=new Attr;
166        pClone->qName       = attributes.getQName(i);
167        pClone->uri         = attributes.getURI(i);
168        pClone->localPart   = attributes.getLocalName(i);
169        pClone->value       = attributes.getValue(i);
170        pClone->attrType    = attributes.getType(i);
171        sortedList.insertElementAt(pClone, j);
172    }
173    SAX2XMLFilterImpl::startElement(uri, localname, qname, sortedList);
174}
Note: See TracBrowser for help on using the repository browser.