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” 个;
答
A DOMElement
可能包含其他DOMElements
或DOMText
的集合。要获得元素的文本值,您需要调用方法getTextContent()
,getNodeValue
将始终返回NULL
。 从概念上讲,这是另一种更好的方式,因为DOMText
是DOMElement
的孩子,我们可以遍历子节点并获取值。
下面是一个方法的形式逻辑:
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());
}
有没有错误,它只是不工作 – user513164 2011-04-04 11:45:04
所以你解析的节点是什么,你在期待什么,你在得到什么? – 2011-04-04 14:13:07