Files
2026-02-21 16:45:37 +08:00

112 lines
2.4 KiB
C#

public class MegaXMLReader
{
private static char TAG_START = '<';
private static char TAG_END = '>';
private static char SPACE = ' ';
private static char QUOTE = '"';
private static char SLASH = '/';
private static char EQUALS = '=';
private static string BEGIN_QUOTE = string.Empty + EQUALS + QUOTE;
public MegaXMLNode read(string xml)
{
int num = 0;
int num2 = 0;
MegaXMLNode megaXMLNode = new MegaXMLNode();
MegaXMLNode megaXMLNode2 = megaXMLNode;
xml = xml.Replace(" \n", string.Empty);
xml = xml.Replace("\n", string.Empty);
while (true)
{
num = xml.IndexOf(TAG_START, num2);
if (num < 0 || num >= xml.Length)
{
break;
}
num++;
num2 = xml.IndexOf(TAG_END, num);
if (num2 < 0 || num2 >= xml.Length)
{
break;
}
int num3 = num2 - num;
string text = xml.Substring(num, num3);
if (text[0] == SLASH)
{
megaXMLNode2 = megaXMLNode2.parentNode;
continue;
}
bool flag = true;
if (text[num3 - 1] == SLASH)
{
text = text.Substring(0, num3 - 1);
flag = false;
}
MegaXMLNode megaXMLNode3 = parseTag(text);
megaXMLNode3.parentNode = megaXMLNode2;
megaXMLNode2.children.Add(megaXMLNode3);
if (flag)
{
megaXMLNode2 = megaXMLNode3;
}
}
return megaXMLNode;
}
public MegaXMLNode parseTag(string xmlTag)
{
MegaXMLNode megaXMLNode = new MegaXMLNode();
int num = xmlTag.IndexOf(SPACE, 0);
if (num < 0)
{
megaXMLNode.tagName = xmlTag;
return megaXMLNode;
}
string tagName = xmlTag.Substring(0, num);
megaXMLNode.tagName = tagName;
string xmlTag2 = xmlTag.Substring(num, xmlTag.Length - num);
return parseAttributes(xmlTag2, megaXMLNode);
}
public MegaXMLNode parseAttributes(string xmlTag, MegaXMLNode node)
{
int num = 0;
int num2 = 0;
int num3 = 0;
while (true)
{
num = xmlTag.IndexOf(BEGIN_QUOTE, num3);
if (num < 0 || num > xmlTag.Length)
{
break;
}
num2 = xmlTag.LastIndexOf(SPACE, num);
if (num2 < 0 || num2 > xmlTag.Length)
{
break;
}
num2++;
string name = xmlTag.Substring(num2, num - num2);
num += 2;
num3 = xmlTag.IndexOf(QUOTE, num);
if (num3 < 0 || num3 > xmlTag.Length)
{
break;
}
int length = num3 - num;
string value = xmlTag.Substring(num, length);
MegaXMLValue megaXMLValue = new MegaXMLValue();
megaXMLValue.name = name;
megaXMLValue.value = value;
node.values.Add(megaXMLValue);
}
return node;
}
}