我使用xerces-c解析了一个XML文档,可以成功地将它写到像DOMPrint示例这样的文件中,但是我不能将它存储在数组中。我在网上看到我仍然应该使用序列化程序,但我不确定要改变什么。显然,我应该使用其他东西,而不是使用LocalFileFormatTarget,但是在网上查找MemBufFormatTarget上的参考资料并没有给出如何使用它的线索。如何使用xerces-c将xml文档转换为字符串?
发布于 2011-06-26 19:13:28
使用类似下面这样的XMLFormatTarget类将输出放入字符缓冲区:
class LStringXMLFormatTarget : public XMLFormatTarget
{
public:
LStringXMLFormatTarget()
{
m_pBuffer = NULL;
m_nTotal = 0;
}
char* GetBuffer()
{
return m_pBuffer;
}
ULONG GetLength()
{
return m_nTotal;
}
virtual void writeChars(const XMLByte* const toWrite, const XMLSize_t count, XMLFormatter* const formatter)
{
if(toWrite)
{
char* pTmp = new char[m_nTotal + count + 1];
if(m_pBuffer)
{
memcpy(pTmp, m_pBuffer, m_nTotal);
delete m_pBuffer;
}
memcpy(&pTmp[m_nTotal], toWrite, count);
m_nTotal += count;
m_pBuffer = pTmp;
if(m_pBuffer)
m_pBuffer[m_nTotal] = 0;
}
}
protected:
char* m_pBuffer;
ULONG m_nTotal;
};请注意,这实际上是一个单字符的缓冲区,因为输出编码也可以由多字节字符组成。
它与DOMLSOutput和DOMLSSerializer对象一起使用:
DOMLSOutput* pLSOutput = impl->createLSOutput();
if(pLSOutput)
{
pLSOutput->setByteStream(&stringTarget);
pSerializer->write(doc, pLSOutput);
}附注:这里的实现只是为了展示XMLFormatTarget是如何工作的。
https://stackoverflow.com/questions/4390771
复制相似问题