c ++ xml解析器函数不起作用

时间:2011-04-04 11:28:39

标签: xml-parsing

我使用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&lt; getNodeValue())&lt;&lt; “\ n” 个;

2 个答案:

答案 0 :(得分:1)

DOMElement可能包含其他DOMElementsDOMText的集合。要获取需要调用方法getTextContent()的元素的文本值,getNodeValue将始终返回NULL。 这是概念上另一种更好的方法,因为DOMTextDOMElement的子节点,我们可以遍历子节点并获取值。

以下是方法形式的逻辑:

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;   
}

希望这会有所帮助:)

答案 1 :(得分:1)

getNodeValue()将始终返回一个空字符串,因为元素节点的“值”位于其子节点中。在我们的例子中,它是文本节点子。无论哪种方式都是遍历子节点 或使用getTextContent。 首先使用hasChildNodes()检查节点中的子节点,然后使用getFirstChild()等方法。然后使用getNodeValue()

DOMNode* ptrDomNode = SomeNode;

if(ptrDomNode->hasChildNodes())
{
    DOMNode* dTextNode =  ptrDomNode->getFirstChild();         
    char* string = XMLString::transcode(dTextNode->getNodeValue());
}