【问题标题】:Can´t read some XML files?无法读取某些 XML 文件?
【发布时间】:2015-04-20 11:37:14
【问题描述】:

我尝试从 Vector CANAlyzer xml 文件制作 XML 解析器。此代码适用于其他 xml 文件,但不适用于此文件。请问我在xml标准中有什么遗漏。

我想解析Network 和Nodes。

 XElement xmlDoc = XElement.Load(@"Short.xml");
            var result = from c in xmlDoc.Descendants("Network")
                         select new Network()
                       {
                           Network_DB_id = int.Parse(c.Attribute("DB_ID").Value),
                           Name = (string)c.Element("Name").Value,
                           ListNode = from f in c.Descendants("Node")
                                      select new Node()
                                      {
                                          Node_DB_id = int.Parse(f.Attribute("DB_ID").Value),
                                          Name = (string)f.Element("Name").Value,
                                      }
                       };
            return result.ToList();

 public class Network
    {
        public string Name { get; set; }
        public int Network_DB_id { get; set; }
        public IEnumerable<Node> ListNode { get; set; }
    }
    public class Node
    {
        public string Name { get; set; }
        public int Node_DB_id { get; set; }

        public IEnumerable<Message> ListTXMessage { get; set; }
        public IEnumerable<Message> ListRXMessage { get; set; }

    }

XML 文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
  <Network DB_ID="-4095">
      <Name>SPACE4000</Name>
      <Attribute>
        <Name>BusType</Name>
        <Value>CAN</Value>
      </Attribute>
      <Node DB_ID="4">
        <Name>Space</Name>
        <TxMessage  DB_ID="88">
          <Name>ST_status_1</Name>
      <ID>0x520</ID>
      <Frametype>CAN Standard</Frametype>
      <DLC>8</DLC>
      <Comment></Comment>
      <Signal DB_ID="701">
        <Name>oil2</Name>
        <Bitposition>2</Bitposition>
        <Bitsize>1</Bitsize>
        <Byteorder>Intel</Byteorder>
        <Valuetype>Unsigned</Valuetype>
        <Factor>1</Factor>
        <Offset>0</Offset>
        <Minimum>0</Minimum>
        <Maximum>0</Maximum>
        <Unit></Unit>
        <Comment></Comment>
      </Signal>
    </TxMessage>
  </Node>
</Network>

【问题讨论】:

  • XML 末尾有一个“}”符号
  • 好的,我明白了.. 它不在原始 xml 文件中,只是在我发布问题时错过了。

标签: c# xml linq parsing object


【解决方案1】:

无需像您在某些地方所做的那样转换和调用值,即(string)x.Element("foo").Value。 int.Parse(x.Element("foo").Value) 电话也是如此。我对下面的示例进行了编码,假设 XML 文件中可能有多个网络,但我怀疑它是否考虑到 Network 是根元素。如果只有一个网络,请考虑重构以反映这一点。

var xdoc = XDocument.Load("short.xml");

var networks = xdoc.Elements("Network").Select(x => new Network
{
    Network_DB_id = (int)x.Attribute("DB_ID"),
    Name = (string)x.Element("Name"),
    ListNode = x.Elements("Node").Select(n => new Node
    {
        Name = (string)n.Element("Name"),
        Node_DB_id = (int)n.Attribute("DB_ID"),

        // etc.
    })  
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多