blob: 5453902eba64132778745be492c69bff8f2b9055 [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <util/xml/XMLElementImpl.h>
#include <util/domcore/TextImpl.h>
/** see XMLElementImpl.h */
XMLElementImpl::XMLElementImpl(const DOMString *tag)
{
if (tag)
{
mTagName = *tag;
}
}
/** see XMLElementImpl.h */
XMLElementImpl::~XMLElementImpl()
{
}
/** see XMLElementImpl.h */
const DOMString* XMLElementImpl::getTagName() const
{
return &mTagName;
}
/** see XMLElementImpl.h */
void XMLElementImpl::setAttribute(const DOMString* name, const DOMString* value)
throw (DOMException)
{
if (name && value)
{
mAttributeMap[*name] = *value;
}
}
/** see XMLElementImpl.h */
void XMLElementImpl::removeAttribute(const DOMString* name) throw (DOMException)
{
if (name)
{
mAttributeMap.erase(*name);
}
}
/** see XMLElementImpl.h */
const DOMString* XMLElementImpl::getAttribute(const DOMString* name) const
{
if (name)
{
DOMStringMap::const_iterator pos = mAttributeMap.find(*name);
if (pos != mAttributeMap.end())
{
return &(pos->second);
}
}
return NULL;
}
/** see XMLElementImpl.h */
bool XMLElementImpl::hasAttributes() const
{
return !mAttributeMap.empty();
}
/** see XMLElementImpl.h */
const DOMStringMap* XMLElementImpl::getAttributeMap() const
{
return &mAttributeMap;
}
/** see XMLElementImpl.h */
const NodeImpl* XMLElementImpl::findSoloChildNode(const char* tag) const
{
if (NULL == tag)
{
return NULL;
}
string token;
NodeListImpl *nodeList = NULL;
const NodeImpl *childNode = NULL;
token.assign(tag);
nodeList = getElementsByTagName(&token);
if (nodeList->getLength() > 0)
{
childNode = nodeList->item(0);
}
return childNode;
}
/** see XMLElementImpl.h */
const string* XMLElementImpl::getSoloText(const char* tag) const
{
const NodeImpl *textNode = this->findSoloChildNode(tag);
if (textNode)
{
textNode = textNode->getFirstChild();
if (textNode)
{
return static_cast<const TextImpl*>(textNode)->getData();
}
}
return NULL;
}
/** see XMLElementImpl.h */
const XMLElementImpl* XMLElementImpl::getSoloElement(const char* tag) const
{
const NodeImpl *node = findSoloChildNode(tag);
if (node)
{
return static_cast<const XMLElementImpl*>(node);
}
return NULL;
}