【发布时间】:2018-03-13 21:32:51
【问题描述】:
我正在尝试将 XML 文件(我不知道哪些内容/结构)转换为自定义树。 树有一个如下形式的构造函数:
InformationNode(String key, String value, 'enum' type).
InformationNode 有一个addChild 功能,没有child 数量限制。我目前的代码如下:
public static InformationNode fromXML(String xml)
{
xml = xml.Replace("< ", "<").Replace("</ ", "</"); //Bugfix for some API's.
XDocument xdoc = XDocument.Parse(xml);
var details = xdoc.Root.Elements();
String key = "->";
InformationNode node = new InformationNode(key, "", InformationType.Object);
foreach (var detail in details)
{
//If XML is Leaf.
if (details.Count() == 0 && int.TryParse(detail.Value.Trim().ToString(), out var n))
return new InformationNode(key, detail.Value.Trim().ToString(), InformationType.Int);
if (details.Count() == 0)
return new InformationNode(key, detail.Value.Trim().ToString(), InformationType.String);
//If XML is object:
node.addChild(fromXML(detail.Value.Trim()));
}
return node;
}
但不幸的是,返回了一个空节点。 谁能告诉我我做错了什么?
编辑: 根据要求:2 个测试用例。
InformationNode a = InformationNode.fromXML("<stationcode> 6391 </ stationcode >");
InformationNode b = InformationNode.fromXML("<?xml version=\"1.0\" encoding=\"utf - 8\" ?><weerstation id=\"6391\"><stationcode> 6391 </ stationcode >< stationnaam regio = \"Venlo\" > Meetstation Arcen </ stationnaam >< lat > 51.50 </ lat >< lon > 6.20 </ lon >< datum > 09 / 28 / 2017 20:20:00 </ datum >< luchtvochtigheid > 80 </ luchtvochtigheid >< temperatuurGC > 18.7 </ temperatuurGC >< windsnelheidMS > 3.5 </ windsnelheidMS >< windsnelheidBF > 3 </ windsnelheidBF >< windrichtingGR > 207 </ windrichtingGR >< windrichting > ZZW </ windrichting >< luchtdruk > -</ luchtdruk >< zichtmeters > -</ zichtmeters >< windstotenMS > 6.4 </ windstotenMS >< regenMMPU > -</ regenMMPU >< zonintensiteitWM2 > -</ zonintensiteitWM2 >< icoonactueel ID = \"cc\" zin = \"Zwaar bewolkt\" >https://www.buienradar.nl/resources/images/icons/weather/30x30/cc.png</ icoonactueel >< temperatuur10cm > 18.2 </ temperatuur10cm >< url >http://www.buienradar.nl/nederland/weerbericht/weergrafieken/6391</ url >< latGraden > 51.83 </ latGraden >< lonGraden > 6.33 </ lonGraden ></ weerstation > ");
【问题讨论】:
-
不确定,但我认为this 将帮助您从 XML 字符串构建树。
-
提供一个简化但完整的示例来重现您的问题,以便我们自己重现它。排除所有不必要的细节。
-
您是否尝试过单步执行代码以找出问题所在?您可以使用即时窗口执行语句以找出违规的位置。
-
如果 details.count 等于 0,那么将没有要 foreach 的细节。也许这些应该发生在 foreach 之前?
-
@dcg 知道它将接收什么 XML 文件,这不是我的目的,我希望能够转换 any XML 文件
标签: c# asp.net .net xml asp.net-mvc