【问题标题】:Reading XML file by name按名称读取 XML 文件
【发布时间】:2013-05-14 00:14:33
【问题描述】:

我有一个以下格式的 XML 文件。

<ComponentStream component="Path" name="path" componentId="DV005120211_40"><Samples><PathFeedrate dataItemId="DV005120211_47" timestamp="2013-05-14T02:26:12.0576" name="path_feedrate1" sequence="8608400">1440.0000000000</PathFeedrate><PathFeedrate dataItemId="DV005120211_48" timestamp="2013-05-09T19:30:45.0389Z" name="path_feedrate2" sequence="216">UNAVAILABLE</PathFeedrate><PathFeedrate dataItemId="DV005120211_49" timestamp="2013-05-09T19:30:45.0389Z" name="path_feedrate3" sequence="217">UNAVAILABLE</PathFeedrate><PathFeedrate dataItemId="DV005120211_50" timestamp="2013-05-09T19:30:45.0389Z" name="path_feedrate4" sequence="219">UNAVAILABLE</PathFeedrate><PartCount dataItemId="DV005120211_62" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro910" sequence="8099806">0.0000000000</PartCount><PartCount dataItemId="DV005120211_63" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro909" sequence="8099805">0.0000000000</PartCount><PartCount dataItemId="DV005120211_64" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro908" sequence="8099804">0.0000000000</PartCount><PartCount dataItemId="DV005120211_65" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro907" sequence="8099803">7.0000000000</PartCount><PartCount dataItemId="DV005120211_66" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro906" sequence="8099802">0.0000000000</PartCount><PartCount dataItemId="DV005120211_67" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro905" sequence="8099801">0.0000000000</PartCount><PartCount dataItemId="DV005120211_68" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro904" sequence="8099800">0.0000000000</PartCount><PartCount dataItemId="DV005120211_69" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro903" sequence="8099799">0.0000000000</PartCount><PartCount dataItemId="DV005120211_70" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro902" sequence="8099798">0.0000000000</PartCount><PartCount dataItemId="DV005120211_71" timestamp="2013-05-13T22:11:00.0639" name="MacroSample_Head1_Macro901" sequence="8099797">0.0000000000</PartCount>

这只是一个部分。但如果您注意到名称="MacroSample_Head1_Macro907"。我正在尝试读取它的价值。这是7.0。 我尝试过使用 linq

string value7 = (string)(XElement.Load("http://B-DVM-4/current")
     .Descendants().FirstOrDefault(d => d.Name.LocalName == "MacroSample_Head1_Macro907"));

但是我有什么问题吗?

【问题讨论】:

  • But I have got something wrong? - 你得到了什么?
  • try FirstOrDefault(d => d.Name.LocalName == "MacroSample_Head1_Macro907").Value 您正在获取元素,但您需要元素的内容。

标签: c# xml linq-to-xml


【解决方案1】:

您当前正在尝试查找名称为 MacroSample_Head1_Macro907元素 - 而我相信您确实希望找到一个名为 PartCount 且具有名为 @ 的 属性 的元素987654323@,值为MacroSample_Head1_Macro907

var element = XElement.Load("http://B-DVM-4/current");
XNamespace ns = "urn:mtconnect.org:MTConnectStreams:1.2";
var part = element.Descendants(ns + "PartCount")
                  .First(x => (string) x.Attribute("name") == 
                              "MacroSample_Head1_Macro907")
                  .Value;

(或者您可能想要转换为 decimal 而不是使用 Value - 大概它一个十进制值。)

注意命名空间被根元素声明为默认命名空间:

<MTConnectStreams ... xmlns="urn:mtconnect.org:MTConnectStreams:1.2" ...>
    ...
</MTConnectStreams>

【讨论】:

  • 好吧,请原谅我的无知,但我如何将其读为字符串?我试图让这个值显示在消息框中。
  • @user2139891:读取什么作为字符串? part 变量已经是 string 变量,就像您原始代码中的 value7 一样。
  • 获取“对象引用未设置为对象实例”异常
  • @user2139891:那么你大概没有PartCount 元素——也许它实际上在不同的命名空间中?由于您只给了我们 XML 的一小部分,我们无法确定。
  • @user2139891:(不过,我已将 FirstOrDefault 更改为 First,以表明您确实希望有一个值。)
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多