【问题标题】:Parse data from XML从 XML 解析数据
【发布时间】:2020-06-03 10:46:54
【问题描述】:

我正在努力读出下面 xml 文件的“ProtectedElements”节点。 我可以毫无问题地读出该节点上方的信息,但我似乎找不到从该特定节点读出校验和的方法。 当我尝试阅读它时,代码返回“null”。

我已尝试查找 Microsoft 的文档,但示例似乎没有帮助。我想这与嵌套有关,但我无法找到解决方案。 我只想读出属性的值。

任何帮助表示赞赏。

        var doc = XDocument.Load(TempFile);

        // get LockInfo element
        var lockInfoElement = doc.Root.Element(ns + "LockInfo");

        // get lockDate 
        var lockDateAttr = lockInfoElement.Attribute("lockDate");
        var lockDateText = lockDateAttr.Value;
        var lockDate = DateTime.Parse(lockDateText);

        // get locked by 
        var lockedByAttr = lockInfoElement.Attribute("lockedBy");
        var lockedByText = lockedByAttr.Value;
        var lockedBy = lockedByText.ToString();

        // get ValidationInfo element
        var validationInfoElement = doc.Root.Element(ns + "ValidationInfo");

        var validationDateAttr = validationInfoElement.Attribute("validationDate");
        var validationDateText = validationDateAttr.Value;
        var validationDate = DateTime.Parse(validationDateText);

        // get ValidationInfo element
        var validationByAttr = validationInfoElement.Attribute("validatedBy");
        var validationByText = validationByAttr.Value;
        var validationBy = validationByText.ToString();

        // get ConfigSeal checksum element
        var configInfoElement = doc.Root.Element(ns + "ConfigurationSeal");
        var configurationSealAttr = configInfoElement.Attribute("checksum");
        var configurationSealChkSum = configurationSealAttr.Value;
        var configurationSealText = configurationSealChkSum.ToString();

        //--------------------------------------------------------------------

        // get Protected elements checksum
        var protectedElements = doc.Root.Element(ns + "ProtectedElements");
        var protectedElementsAttr = protectedElements.Attribute("checksum");
        var protectedElementsChkSum = protectedElementsAttr.Value;
        var protectedElementsText = protectedElementsChkSum.ToString();

XML 数据:

<SafetyConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:abb-robotics-safety-controller-configuration sc_cfg.1.00.01.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" version="1.00.01" xmlns="urn:abb-robotics-safety-controller-configuration">
  <ValidationInfo validationDate="2019-08-29T13:45:16" validatedBy="W01 Admin"/>
  <LockInfo lockDate="2020-02-11T13:54:07" lockedBy="W01 Admin" controllerId="6700-110323"/>
  <ConfigurationSeal checksum="776890E3E367E5171CC3FD52700BE8FA5373422BCC6C4214C0321E6BEC02EA52" creationDate="2019-08-29T13:39:23.2736126+02:00" createdBy="W01 Admin" systemName="00RZ21_ST010_IR001" swVersion="1.02.04">
    <ProtectedElements checksum="20E318119904F2A8506AD3A00035BE2FE562FA772D371DCC43B04A2E4622550F" />
    <SiosCfg version="1.0">
      <Net name="PNFDevice">
        <Device name="PNFDeviceDev" inSizeBits="64" outSizeBits="64" address="">
          <Module name="InputOutputModule" inputSize="8" outputSize="8" sourceAddress="100" destAddress="144" wdTimeout="500" crcLength="3" fParVersion="2" slot="3" silLevel="2" visible="true" readonly="false" />

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:
    var protectedElements = configInfoElement.Element(ns + "ProtectedElements");
    var protectedElementsAttr = protectedElements.Attribute("checksum");
    

    在第一行中,我们正在查看configInfoElement 而不是doc.Root,在第二行中,我们正在查看protectedElements 而不是configInfoElement

    【讨论】:

    • 您好,感谢您的回复。您提供的信息帮助我解决了这个问题。一旦堆栈溢出,我会标记你的答案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多