Xerces parser cdata раздел не правильно проанализированC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Xerces parser cdata раздел не правильно проанализирован

Сообщение Anonymous »

У меня есть раздел CDATA с проблемой, используя синтаксический анализатор Xerces. Ему удается проанализировать некоторые из XML правильно, но по какой -то причине часть раздела CDATA содержит проводной знак. < /P>
Это моя строка XML: < /p>
const std::string XML = R"(



AAAAccf123]]>
data]]>


)";
< /code>
Вот как настроен мой анализатор: < /p>

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#include
#include
#include
#include
#include
#include
#include

namespace xmlx
{
class XMLNode
{
private:
xercesc::DOMElement* _element;
bool _first_in_loop;

public:
XMLNode() : _element(nullptr), _first_in_loop(true)
{
}

XMLNode(xercesc::DOMElement* element) : _element(element), _first_in_loop(true) {}

~XMLNode()
{
}

xercesc::DOMDocument* parseXml(const std::string& XML = "")
{
xercesc::MemBufInputSource memBuf(reinterpret_cast(XML.c_str()), XML.size(), "xmlBuffer", false);

xercesc::XercesDOMParser* parser = new xercesc::XercesDOMParser();
parser->setValidationScheme(xercesc::XercesDOMParser::Val_Never);
parser->setDoNamespaces(false);
parser->setDoSchema(false);
parser->setLoadExternalDTD(false);

xercesc::DOMDocument* doc;
try
{
parser->parse(memBuf);
doc = parser->getDocument();
delete parser;
}
catch (...)
{
std::cerr getFirstChild(); child != nullptr; child = child->getNextSibling())
{
if (child->getNodeType() == xercesc::DOMNode::ELEMENT_NODE)
{

xercesc::DOMElement* currentElement = dynamic_cast(child);
std::string myStr = xercesc::XMLString::transcode(currentElement->getTagName());
if (myStr == tagName)
{
return XMLNode(currentElement);
}
}
}
std::string error = "No next element found";
throw(std::runtime_error(error));
}

std::string getText()
{
if (_element == nullptr) return "";

for (DOMNode* child = _element->getFirstChild(); child != nullptr; child = child->getNextSibling())
{
if (child->getNodeType() == xercesc::DOMNode::TEXT_NODE)
{
xercesc::DOMText* tempText = dynamic_cast(child);
if (tempText == nullptr)
{
return "";
}
char* textContent = xercesc::XMLString::transcode(tempText->getData());
std::string text(textContent);
xercesc::XMLString::release(&textContent);
return text;
}
if (child->getNodeType() == xercesc::DOMNode::CDATA_SECTION_NODE)
{
xercesc::DOMCDATASection* tempCdata1 = dynamic_cast(child);
if (tempCdata1 == nullptr)
{
return "";
}
char* textContent1 = xercesc::XMLString::transcode(tempCdata1->getData());
std::string text1(textContent1);
xercesc::XMLString::release(&textContent1);
return text1;
}
}
return "";
}
};
}
< /code>
Печать на консоли: < /p>
xercesc::XMLPlatformUtils::Initialize();

xmlx::XMLNode myXmlx;
myXmlx.parseXml(XML);
std::cout

Подробнее здесь: https://stackoverflow.com/questions/793 ... -correctly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Xerces parser cdata раздел не правильно проанализирован
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Xerces parser cdata раздел не правильно проанализирован
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Как удалить раздел CDATA с окончательного выхода XML в C#
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как удалить раздел CDATA с окончательного выхода XML в C# [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как сохранить раздел CDATA в строке XML при преобразовании в документ
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»