Abstract

IDL

module com { module sun { module star { module xml { module sax {
/** a container for the attributes of an xml element.
<br>Attributes are seperated into known attributes and unknown attributes.
<p>Known attributes have a local name that is known to the <type>XFastTokenHandler</token>
registered at the <type>XFastParser</type> which created the sax event containing
this attributes. If an attribute also has a namespace, that must be registered
at the <type>XFastParser</type>, else this attribute is also unknown even if
the local name is known.
*/
interface XFastAttributeList: com::sun::star::uno::XInterface
{
/** checks if an attribute is available.<br>
@param Token
contains the integer token from the <type>XFastTokenHandler</type>
registered at the <type>XFastParser</type>.<br>
If the attribute name has a namespace that was registered with the
<type>XFastParser</type>, Token contains the integer token of the
attributes local name from the <type>XFastTokenHandler</type> and
the integer token of the namespace combined with an arithmetic
<b>or</b> operation.
@returns
<TRUE/>, if the attribute is available
*/
boolean hasAttribute( [in] long Token );
/** retrieves the token of an attributes value.<br>
@param Token
contains the integer token from the <type>XFastTokenHandler</type>
registered at the <type>XFastParser</type>.<br>
If the attribute name has a namespace that was registered with the
<type>XFastParser</type>, Token contains the integer token of the
attributes local name from the <type>XFastTokenHandler</type> and
the integer token of the namespace combined with an arithmetic
<b>or</b> operation.
@returns
The integer token of the value from the attribute or <const>FastToken::Invalid</const>
@raises SAXEXception
if the attribute is not available
*/
long getValueToken( [in] long Token )
raises( SAXException );
/**retrieves the token of an attributes value.<br>
@param Token
contains the integer token from the <type>XFastTokenHandler</type>
registered at the <type>XFastParser</type>.<br>
If the attribute name has a namespace that was registered with the
<type>XFastParser</type>, Token contains the integer token of the
attributes local name from the <type>XFastTokenHandler</type> and
the integer token of the namespace combined with an arithmetic
<b>or</b> operation.
@param Default
This value will be returned if the attribute is not available
@returns
If the attribute is available it returns the integer token of the value
from the attribute or <const>FastToken::Invalid</const>.
If not the value of <param>Default</param> is returned.
*/
long getOptionalValueToken( [in] long Token, [in] long Default );
/** retrieves the value of an attributes.<br>
@param Token
contains the integer token from the <type>XFastTokenHandler</type>
registered at the <type>XFastParser</type>.<br>
If the attribute name has a namespace that was registered with the
<type>XFastParser</type>, Token contains the integer token of the
attributes local name from the <type>XFastTokenHandler</type> and
the integer token of the namespace combined with an arithmetic
<b>or</b> operation.
@returns
The string value from the attribute.
@raises SAXEXception
if the attribute is not available
*/
string getValue( [in] long Token )
raises( SAXException );
/** retrieves the value of an attributes.<br>
@param Token
contains the integer token from the <type>XFastTokenHandler</type>
registered at the <type>XFastParser</type>.<br>
If the attribute name has a namespace that was registered with the
<type>XFastParser</type>, Token contains the integer token of the
attributes local name from the <type>XFastTokenHandler</type> and
the integer token of the namespace combined with an arithmetic
<b>or</b> operation.
@returns
The string value from the attribute or an empty string if the
attribute is not available.
*/
string getOptionalValue( [in] long Token );
/** returns a sequence of attributes which names and or namespaces URLS
can not be translated to tokens.
*/
sequence< ::com::sun::star::xml::Attribute > getUnknownAttributes();
};
}; }; }; }; };

Sample implementation using gperf

gperf is a cool little tool to generate a perfect
hash algorithm at compile time for a fixed set of strings.

When writing a filter to import an xml format you usually have a list of valid xml names.
They can be easily extracted from a schema. Lets assume you already have a list
of valid xml names in the file tokens.txt, for example

User
Admin
Name
Login

The following pearl script can convert that file to an input file for gperf and
also a header file with one const sal_Int32 identifier for each xml name.