не работает синтаксический анализатор c ++ - PullRequest
1 голос
/ 04 апреля 2011

Я использую Xerces C ++ для работы с XML-файлом? но getNodeValue () и setNodeValue () не работают, но getNodeName () работает. У кого-нибудь есть предложения?

 if( currentNode->getNodeType() &&  currentNode->getNodeType() == DOMNode::ELEMENT_NODE ) 
         {
        // Found node which is an Element. Re-cast node as element
            DOMElement* currentElement= dynamic_cast< xercesc::DOMElement* >( currentNode );
            if( XMLString::equals(currentElement->getTagName(), TAG_ApplicationSettings))
            {
               // Already tested node as type element and of name "ApplicationSettings".
               // Read attributes of element "ApplicationSettings".
               const XMLCh* xmlch_OptionA = currentElement->getAttribute(ATTR_OptionA);
               m_OptionA = XMLString::transcode(xmlch_OptionA);
                   XMLCh* t,*s;
        //s= XMLString::transcode("manish");
        //currentNode->setElementText(s);
                  t=(XMLCh*)currentNode->getNodeName();
               s=(XMLCh*)currentNode->getNodeValue();

cout

Ответы [ 2 ]

1 голос
/ 07 июня 2012

getNodeValue() всегда будет возвращать пустую строку, потому что «значение» узла элемента находится в его дочернем элементе.В нашем случае это текстовый узел child.Любой способ состоит в том, чтобы перебрать дочерние узлы или использовать getTextContent.Сначала проверьте дочерние узлы в узле, используя hasChildNodes(), затем используйте методы, такие как getFirstChild() и т. Д.После этого используйте getNodeValue().

DOMNode* ptrDomNode = SomeNode;

if(ptrDomNode->hasChildNodes())
{
    DOMNode* dTextNode =  ptrDomNode->getFirstChild();         
    char* string = XMLString::transcode(dTextNode->getNodeValue());
}
1 голос
/ 28 января 2012

A DOMElement может содержать коллекцию других DOMElements или DOMText.Чтобы получить текстовое значение элемента, вам нужно вызвать метод getTextContent(), getNodeValue всегда вернет NULL.Концептуально это еще один лучший способ, поскольку DOMText является дочерним по отношению к DOMElement, который мы можем пройти через дочерний узел и получить значение.

Ниже приведена логика в форме метода:1011 *

string getElementValue(const DOMElement& parent)
{    
 DOMNode *child;   

 string strVal;

 for (child = parent.getFirstChild();child != NULL ; child = child->getNextSibling())    
 {    
    if(DOMNode::TEXT_NODE == child->getNodeType())    
    {    
     DOMText* data = dynamic_cast<DOMText*>(child);    
     const XMLCh* val = data->getWholeText();    
     strVal += XMLString::transcode(val);    
    }    
    else    
    {    
        throw "ERROR : Non Text Node";    
    }    
 }    
 return strVal;   
}

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...