C++ xml解析器函数不能正常工作

问题描述:

我使用xerces C++来处理xml文件吗?但getNodeValue()和setNodeValue()不工作,但getNodeName()正在工作。有没有人有任何建议?C++ xml解析器函数不能正常工作

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 < getNodeValue())< < “\ n” 个;

+0

有没有错误,它只是不工作 – user513164 2011-04-04 11:45:04

+0

所以你解析的节点是什么,你在期待什么,你在得到什么? – 2011-04-04 14:13:07

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

希望这有助于:)

getNodeValue()总是会返回一个空字符串,因为该元素节点的“值”是它的孩子。在我们的例子中,它是文本节点子节点。无论哪种方式是遍历子节点 或使用getTextContent。 首先使用hasChildNodes()检查节点中的子节点,然后使用类似getFirstChild()等的方法。之后使用getNodeValue()

DOMNode* ptrDomNode = SomeNode; 

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