Гамбо HTML текст внутри

я использую Gumbo проанализировать веб-страницу в CP1251, Я преобразовал текст в UTF-8 и отправил его в gumbo parser. У меня проблема с получением текста внутри A связать с

node->v.text.text

Я получаю странные символы на выходе, в то время как источник правильно отображается в консоли.
я использую Qt 5.2 а также libiconv для целей конвертации.

Нужно ли преобразовывать текст узла в локальную кодовую страницу или что я делаю не так?

Начало страницы в CP1251

    QByteArray barrData = pf->getData();

size_t dstlen = 1048576;
char buf[dstlen];
memset((char*)buf, 0, dstlen);

char* pIn = barrData.data();
char* pOut = (char*)buf;

size_t srclen = barrData.size();iconv_t conv = iconv_open("UTF-8", "CP1251");
iconv(conv, &pIn, &srclen, &pOut, &dstlen);
iconv_close(conv);

GumboOutput* output = gumbo_parse(buf);

parsePage(output->root);
gumbo_destroy_output(&kGumboDefaultOptions, output);

анализ

if (node->v.element.tag == GUMBO_TAG_DIV && (_class = gumbo_get_attribute(&node->v.element.attributes, "class")))
{
if (QString(_class->value) == "catalog-item-title")
{
qDebug() << "parsePage: found product, parsing...";

GumboVector* children = &node->v.element.children;
for (int i = 0; i < children->length; ++i)
{
GumboNode* node = static_cast<GumboNode*>(children->data[i]);

GumboAttribute* href;
GumboAttribute* id;

if (node->v.element.tag == GUMBO_TAG_A &&
(href = gumbo_get_attribute(&node->v.element.attributes, "href"))
)
{
char buf[1024];
memset(buf, 0, 1024);
int i = node->v.text.original_text.length;
memcpy(buf, node->v.text.original_text.data, i);QString strTitle = buf;
Q_ASSERT(node->v.text.original_text.length > 0);
qDebug() << "parsePage: found product" << strTitle << href->value;

break;
}
}
}
}

Исходный текст страницы:

<div class="catalog-item-title"><a href="/textile/postelnoe-bele/korolevskoe-iskushenie-perkal/izmir_2/">Измир 2</a></div>

1

Решение

Я наконец-то выкурил примеры. Текст содержится внутри дочернего узла.

            if (node->v.element.tag == GUMBO_TAG_A &&
(href = gumbo_get_attribute(&node->v.element.attributes, "href"))
)
{
QString strTitle;
GumboNode* title_text = static_cast<GumboNode>*)(node->v.element.children.data[0]);
if (title_text->type == GUMBO_NODE_TEXT)
{
strTitle = title_text->v.text.text;
}

qDebug() << "parsePage: found product" << strTitle << href->value;

break;
}
2

Другие решения


По вопросам рекламы [email protected]