本文整理汇总了C#中list.GetSub方法的典型用法代码示例。如果您正苦于以下问题:C# list.GetSub方法的具体用法?C# list.GetSub怎么用?C# list.GetSub使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类list
的用法示例。
在下文中一共展示了list.GetSub方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: create
/// <summary>
/// 解析HTML节点
/// </summary>
/// <param name="html"></param>
private void create(string html)
{
int length = html.Length;
children = new list<htmlNode>();
if (length < 2)
{
children.Add(new htmlNode { nodeText = new htmlText { FormatHtml = html }, Parent = this });
}
else
{
int nextIndex, nodeCount;
htmlNode nextNode;
fixed (char* htmlFixed = html + "<")
{
fixedMap spaceFixedMap = new fixedMap(spaceMap.Map);
fixedMap spaceSplitFixedMap = new fixedMap(spaceSplitMap);
fixedMap tagNameFixedMap = new fixedMap(tagNameMap);
fixedMap tagNameSplitFixedMap = new fixedMap(tagNameSplitMap);
fixedMap attributeSplitFixedMap = new fixedMap(attributeSplitMap);
fixedMap attributeNameSplitFixedMap = new fixedMap(attributeNameSplitMap);
int startIndex, tagNameLength;
string name, htmlValue;
char* startChar = htmlFixed, currentChar = htmlFixed, endChar = htmlFixed + length, scriptChar;
char splitChar;
while (currentChar != endChar)
{
for (*endChar = '<'; *currentChar != '<'; ++currentChar) ;
if (currentChar != endChar)
{
if ((*++currentChar & 0xff80) == 0)
{
if (tagNameFixedMap.Get(*currentChar))
{
while ((*startChar & 0xffc0) == 0 && spaceFixedMap.Get(*startChar)) ++startChar;
if (startChar != currentChar - 1)
{
for (scriptChar = currentChar - 2; (*scriptChar & 0xffc0) == 0 && spaceFixedMap.Get(*scriptChar); --scriptChar) ;
children.Add(new htmlNode { nodeText = new htmlText { FormatHtml = html.Substring((int)(startChar - htmlFixed), (int)(scriptChar - startChar) + 1) } });
}
if (*currentChar == '/')
{
#region 标签回合
startChar = currentChar - 1;
if (++currentChar != endChar)
{
while ((*currentChar & 0xffc0) == 0 && spaceFixedMap.Get(*currentChar)) ++currentChar;
if (currentChar != endChar)
{
if ((uint)((*currentChar | 0x20) - 'a') <= 26)
{
for (*endChar = '>'; (*currentChar & 0xffc0) != 0 || !tagNameSplitFixedMap.Get(*currentChar); ++currentChar) ;
TagName = html.Substring((int)((startChar += 2) - htmlFixed), (int)(currentChar - startChar)).toLower();
for (startIndex = children.Count - 1; startIndex >= 0 && (children[startIndex].nodeText.FormatHtml != null || children[startIndex].TagName != TagName); --startIndex) ;
if (startIndex != -1)
{
for (nextIndex = children.Count - 1; nextIndex != startIndex; --nextIndex)
{
nextNode = children[nextIndex];
if (nextNode.nodeText.FormatHtml == null)
{
if (web.html.MustRoundTagNames.Contains(nextNode.TagName) && (nodeCount = (children.Count - nextIndex - 1)) != 0)
{
nextNode.children = new list<htmlNode>(children.GetSub(nextIndex + 1, nodeCount), true);
children.RemoveRange(nextIndex + 1, nodeCount);
foreach (htmlNode value in nextNode.children) value.Parent = nextNode;
}
}
else if (nextNode.nodeText.FormatHtml.Length == 0) nextNode.nodeText.FormatHtml = null;
}
nextNode = children[startIndex];
if ((nodeCount = children.Count - ++startIndex) != 0)
{
nextNode.children = new list<htmlNode>(children.GetSub(startIndex, nodeCount), true);
children.RemoveRange(startIndex, nodeCount);
foreach (htmlNode value in nextNode.children) value.Parent = nextNode;
}
nextNode.nodeText.FormatHtml = string.Empty;//已回合标识
}
while (*currentChar != '>') ++currentChar;
if (currentChar != endChar) ++currentChar;
}
else
{
for (*endChar = '>'; *currentChar != '>'; ++currentChar) ;
if (currentChar != endChar) ++currentChar;
htmlValue = html.Substring((int)(startChar - htmlFixed), (int)(currentChar - startChar));
children.Add(new htmlNode { TagName = "/", nodeText = new htmlText { FormatHtml = htmlValue, FormatText = htmlValue } });
}
startChar = currentChar;
}
}
#endregion
}
else if (*currentChar != '!')
{
#region 标签开始
//.........这里部分代码省略.........