本文整理汇总了C++中HtmlElement类的典型用法代码示例。如果您正苦于以下问题:C++ HtmlElement类的具体用法?C++ HtmlElement怎么用?C++ HtmlElement使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了HtmlElement类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
HtmlElement *HtmlParser::FindElementByNameNS(const char *name, const char *ns, HtmlElement *from)
{
HtmlElement *el = from ? from : rootElement;
if (from)
goto FindNext;
if (!el)
return NULL;
CheckNext:
if (el->NameIs(name) || ns && el->NameIsNS(name, ns))
return el;
FindNext:
if (el->down) {
el = el->down;
goto CheckNext;
}
if (el->next) {
el = el->next;
goto CheckNext;
}
// backup in the tree
HtmlElement *parent = el->up;
while (parent) {
if (parent->next) {
el = parent->next;
goto CheckNext;
}
parent = parent->up;
}
return NULL;
}
示例2: HtmlParser02
static void HtmlParser02()
{
HtmlParser p;
HtmlElement *root = p.Parse("<a><b/><c></c ><d at1=\"<quo&ted>\" at2='also quoted' att3=notquoted att4=end/></a>");
assert(4 == p.ElementsCount());
assert(4 == p.TotalAttrCount());
assert(str::Eq("a", root->name));
assert(NULL == root->next);
HtmlElement *el = root->down;
assert(str::Eq("b", el->name));
assert(root == el->up);
el = el->next;
assert(str::Eq("c", el->name));
assert(root == el->up);
el = el->next;
assert(str::Eq("d", el->name));
assert(NULL == el->next);
assert(root == el->up);
ScopedMem<TCHAR> val(el->GetAttribute("at1"));
assert(str::Eq(val, _T("<quo&ted>")));
val.Set(el->GetAttribute("at2"));
assert(str::Eq(val, _T("also quoted")));
val.Set(el->GetAttribute("att3"));
assert(str::Eq(val, _T("notquoted")));
val.Set(el->GetAttribute("att4"));
assert(str::Eq(val, _T("end")));
}
示例3: HtmlParser05
static void HtmlParser05()
{
HtmlParser p;
HtmlElement *root = p.Parse("<!doctype><html><HEAD><meta name=foo></head><body><object t=la><param name=foo val=bar></object><ul><li></ul></object></body></Html>");
utassert(8 == p.ElementsCount());
utassert(4 == p.TotalAttrCount());
utassert(root->NameIs("html"));
utassert(NULL == root->up);
utassert(NULL == root->next);
HtmlElement *el = root->down;
utassert(el->NameIs("head"));
HtmlElement *el2 = el->down;
utassert(el2->NameIs("meta"));
utassert(NULL == el2->next);
utassert(NULL == el2->down);
el2 = el->next;
utassert(el2->NameIs("body"));
utassert(NULL == el2->next);
el2 = el2->down;
utassert(el2->NameIs("object"));
el = p.FindElementByName("html");
utassert(el);
el = p.FindElementByName("head", el);
utassert(el);
utassert(el->NameIs("head"));
el = p.FindElementByName("ul", el);
utassert(el);
}
示例4: WalkChmTocOrIndex
static void WalkChmTocOrIndex(EbookTocVisitor *visitor, HtmlElement *list, UINT cp, bool isIndex, int level=1)
{
CrashIf(Tag_Ul != list->tag);
// some broken ToCs wrap every <li> into its own <ul>
for (; list && Tag_Ul == list->tag; list = list->next) {
for (HtmlElement *el = list->down; el; el = el->next) {
if (Tag_Li != el->tag)
continue; // ignore unexpected elements
bool valid;
HtmlElement *elObj = el->GetChildByTag(Tag_Object);
if (!elObj)
valid = false;
else if (isIndex)
valid = VisitChmIndexItem(visitor, elObj, cp, level);
else
valid = VisitChmTocItem(visitor, elObj, cp, level);
if (!valid)
continue; // skip incomplete elements and all their children
HtmlElement *nested = el->GetChildByTag(Tag_Ul);
// some broken ToCs have the <ul> follow right *after* a <li>
if (!nested && el->next && Tag_Ul == el->next->tag)
nested = el->next;
if (nested)
WalkChmTocOrIndex(visitor, nested, cp, isIndex, level + 1);
}
}
}
示例5: HtmlParser07
static void HtmlParser07()
{
HtmlParser p;
HtmlElement *root = p.Parse("<test umls=ä\xC3\xB6ü Zero=�&#-1;>", CP_UTF8);
utassert(1 == p.ElementsCount());
ScopedMem<WCHAR> val(root->GetAttribute("umls"));
utassert(str::Eq(val, L"\xE4\xF6\xFC"));
val.Set(root->GetAttribute("zerO"));
utassert(str::Eq(val, L"\x01??"));
}
示例6:
HtmlElement *HtmlElement::GetChildByName(const char *name, int idx) const
{
for (HtmlElement *el = down; el; el = el->next) {
if (el->NameIs(name)) {
if (0 == idx)
return el;
idx--;
}
}
return NULL;
}
示例7: HtmlParser11
static void HtmlParser11()
{
HtmlParser p;
HtmlElement *root = p.Parse("<root/><!-- comment -->");
utassert(1 == p.ElementsCount());
utassert(0 == p.TotalAttrCount());
utassert(root && root->NameIs("root"));
root = p.Parse("<root><!---></root>");
utassert(!root);
}
示例8: CloseTag
void HtmlParser::CloseTag(char *tagName)
{
str::ToLower(tagName);
// to allow for lack of closing tags, e.g. in case like
// <a><b><c></a>, we look for the first parent with matching name
for (HtmlElement *el = currElement; el; el = el->up) {
if (el->NameIs(tagName)) {
currElement = el->up;
return;
}
}
// ignore the unexpected closing tag
}
示例9: HtmlParser03
static void HtmlParser03()
{
HtmlParser p;
HtmlElement *root = p.Parse("<el att =v"al/>");
assert(1 == p.ElementsCount());
assert(1 == p.TotalAttrCount());
assert(str::Eq("el", root->name));
assert(NULL == root->next);
assert(NULL == root->up);
assert(NULL == root->down);
ScopedMem<TCHAR> val(root->GetAttribute("att"));
assert(str::Eq(val, _T("v\"al")));
assert(!root->firstAttr->next);
}
示例10: HtmlParser04
static void HtmlParser04()
{
HtmlParser p;
HtmlElement *root = p.Parse("<el att= va'l></ el >");
utassert(1 == p.ElementsCount());
utassert(1 == p.TotalAttrCount());
utassert(root->NameIs("el"));
utassert(NULL == root->next);
utassert(NULL == root->up);
utassert(NULL == root->down);
ScopedMem<WCHAR> val(root->GetAttribute("att"));
utassert(str::Eq(val, L"va'l"));
utassert(!root->firstAttr->next);
}
示例11: HtmlParserFile
static void HtmlParserFile()
{
TCHAR *fileName = _T("HtmlParseTest00.html");
// We assume we're being run from obj-[dbg|rel], so the test
// files are in ..\src\utils directory relative to exe's dir
ScopedMem<TCHAR> exePath(GetExePath());
const TCHAR *exeDir = path::GetBaseName(exePath);
ScopedMem<TCHAR> p1(path::Join(exeDir, _T("..\\src\\utils")));
ScopedMem<TCHAR> p2(path::Join(p1, fileName));
char *d = file::ReadAll(p2, NULL);
// it's ok if we fail - we assume we were not run from the
// right location
if (!d)
return;
HtmlParser p;
HtmlElement *root = p.ParseInPlace(d);
assert(root);
assert(709 == p.ElementsCount());
assert(955 == p.TotalAttrCount());
assert(str::Eq(root->name, "html"));
HtmlElement *el = root->down;
assert(str::Eq(el->name, "head"));
el = el->next;
assert(str::Eq(el->name, "body"));
el = el->down;
assert(str::Eq(el->name, "object"));
el = el->next;
assert(str::Eq(el->name, "ul"));
el = el->down;
assert(str::Eq(el->name, "li"));
el = el->down;
assert(str::Eq(el->name, "object"));
ScopedMem<TCHAR> val(el->GetAttribute("type"));
assert(str::Eq(val, _T("text/sitemap")));
el = el->down;
assert(str::Eq(el->name, "param"));
assert(!el->down);
assert(str::Eq(el->next->name, "param"));
el = p.FindElementByName("body");
assert(el);
el = p.FindElementByName("ul", el);
assert(el);
int count = 0;
while (el) {
++count;
el = p.FindElementByName("ul", el);
}
assert(18 == count);
free(d);
}
示例12: HtmlParser07
static void HtmlParser07()
{
HtmlParser p;
HtmlElement *root = p.Parse("<test umls=ä\xC3\xB6ü zero=�&#-1;>", CP_UTF8);
assert(1 == p.ElementsCount());
ScopedMem<TCHAR> val(root->GetAttribute("umls"));
#ifdef UNICODE
assert(str::Eq(val, L"\xE4\xF6\xFC"));
#else
assert(str::EndsWith(val, "\xFC"));
#endif
val.Set(root->GetAttribute("zero"));
assert(str::Eq(val, _T("\x01??")));
}
示例13: HtmlParser00
static void HtmlParser00()
{
HtmlParser p;
HtmlElement *root = p.Parse("<a></A>");
utassert(p.ElementsCount() == 1);
utassert(root);
utassert(Tag_A == root->tag && !root->name);
utassert(root->NameIs("a"));
root = p.Parse("<b></B>");
utassert(p.ElementsCount() == 1);
utassert(root);
utassert(Tag_B == root->tag && !root->name);
utassert(root->NameIs("b"));
}
示例14: HtmlParser09
static void HtmlParser09()
{
HtmlParser p;
HtmlElement *root = p.Parse("<?xml version='1.0'?><!-- <html><body></html> --><root attr='<!-- comment -->' />");
assert(1 == p.ElementsCount());
assert(1 == p.TotalAttrCount());
assert(str::Eq("root", root->name));
ScopedMem<TCHAR> val(root->GetAttribute("attr"));
assert(str::Eq(val, _T("<!-- comment -->")));
root = p.Parse("<!-- comment with \" and \' --><main />");
assert(1 == p.ElementsCount());
assert(0 == p.TotalAttrCount());
assert(str::Eq("main", root->name));
}
示例15: WalkBrokenChmTocOrIndex
// ignores any <ul><li> list structure and just extracts a linear list of <object type="text/sitemap">...</object>
static bool WalkBrokenChmTocOrIndex(EbookTocVisitor* visitor, HtmlParser& p, UINT cp, bool isIndex) {
bool hadOne = false;
HtmlElement* el = p.FindElementByName("body");
while ((el = p.FindElementByName("object", el)) != nullptr) {
AutoFreeW type(el->GetAttribute("type"));
if (!str::EqI(type, L"text/sitemap"))
continue;
if (isIndex)
hadOne |= VisitChmIndexItem(visitor, el, cp, 1);
else
hadOne |= VisitChmTocItem(visitor, el, cp, 1);
}
return hadOne;
}