【发布时间】:2018-06-25 09:20:27
【问题描述】:
我有一个 XML,其中包含有关飞行计划的不同信息。我需要使用“RoutePoints”标签获取此飞行计划的数据。下面的示例是表示结构的伪代码。 “+”号表示该部分可以展开。
<RoutePoints>
+<a:anyType z:Id="411" i:type="RoutePointTakeOff">
+<a:anyType z:Id="472" i:type="RoutePoint">
+<a:anyType z:Id="518" i:type="RoutePoint">
<a:anyType z:Ref="349" i:nil="true"/>
<a:anyType z:Ref="272" i:nil="true"/>
+<a:anyType z:Id="576" i:type="RoutePoint">
+<a:anyType z:Id="638" i:type="RoutePointLanding">
</RoutePoints>
因为我有不同类型的元素需要进行不同的处理。我尝试使用 foreach 工具来访问这些元素,示例如下:
foreach ( var routes in document.Descendants("RoutePoints") ){
foreach ( var points in routes.Elements() ) {
if ( points.Attributes(i+"type").First().Value == "RoutePoint") {
//Processing..
}
if ( points.Attributes(i+"type").First().Value == "RoutePointTakeOff") {
//Processing..
}
if ( points.Attributes(i+"nil").First().Value == "true") {
//Processing..
}
if ( points.Attributes(i+"type").First().Value == "RoutePointLanding") {
//Processing..
}
}
}
当 if 子句检查属性比较值不存在时,例如检查值 RoutePointTakeOff 不存在,因为该值在第一行,现在正在检查第二行。
我需要获取元素,我需要处理的信息在元素内部。例如,在 RoutePoint 内部,我需要使用包含的值初始化一些属性。在 RoutePointTakeOff 我需要执行一些算法。问题是我需要根据指针所在的部分执行不同的功能。
我是 C# 编程新手,我确信存在另一种更好的形式来访问此类数据。
您能帮我按类型访问这些数据吗?
【问题讨论】:
-
“我的程序崩溃”——到底发生了什么?是否抛出异常?
-
我无法解析您的 XML!你确定它有效吗?
-
@Wheels73 无效。注意未闭合的元素。
-
@SebastianHofmann - 啊是的......对我来说还早!干杯!
-
您确定
<RoutePoints>没有(默认)命名空间吗?调试器告诉你什么?你也没有展示你是如何得到i:
标签: c# xml xml-parsing