我有给定的XML:
<colors>
<green>150</green>
<red>18</red>
<blue>920</blue>
<orange>80</orange>
<purple>77</purple>
</colors>
我需要读取XML文件,然后对其进行排序,将其用作C头文件。
例如:
#define orange 80 // <orange>
#define red 18 // <red>
应该可以更改XML标记的顺序。
private void TranslateXmlToC(String path)
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNodeList list = doc.SelectNodes("//colors");
Console.WriteLine(list.Item(0).InnerXml);
}
此代码显示所有标签和数据,但现在我想更改订单。
答案 0 :(得分:2)
这可能适合你
var xml = new XmlDocument();
xml.LoadXml("<colors>" +
"<green>150</green>" +
"<red>18</red>" +
"<blue>920</blue>" +
"<orange>80</orange>" +
"<purple>77</purple>" +
"</colors>");
var lst = new Dictionary<string,int>();
foreach (XmlNode n in xml["colors"].ChildNodes)
lst.Add(n.Name, int.Parse(n.InnerText));
var sb = new StringBuilder();
foreach (KeyValuePair<string, int> n in lst.OrderBy(kvp => kvp.Value))
sb.AppendFormat("#define {0} {1} // <{0}>\n", n.Key, n.Value);
string result = sb.ToString();
结果(您可以使用C#字符串填充):
#define red 18 // <red>
#define purple 77 // <purple>
#define orange 80 // <orange>
#define green 150 // <green>
#define blue 920 // <blue>
答案 1 :(得分:0)
您可以使用XPath for C#来获取所需的所有节点/文本(http://csharp.net-tutorials.com/xml/using-xpath-with-the-xmldocument-class/)。使用XPath,您可以选择&#39; colors&#39;下的所有节点。例如。
之后,您可以对它们进行排序,然后显然创建相应的文件并以您需要的语法编写它。