【问题标题】:GetElementsByTagName only gets the first node (XMLDocument)GetElementsByTagName 只获取第一个节点(XMLDocument)
【发布时间】:2016-08-05 10:48:05
【问题描述】:

这是我的代码:

FileInfo[] Files = difo.GetFiles("*.xml");            
        string[] parts;
        string[] FileSearchRes = Directory.GetFiles(@"C:\Users\ahodhv\Perforce\ahodhv_RD0029717_1921\prod\delivery\q_rec\int_test\SOPS", "*.xml", SearchOption.AllDirectories);
        int i = 0;
        foreach (FileInfo File in Files)

        {
            parts = File.Name.Split('_');                                             
            boxvehicles.Items.Add(parts[0]);
            string test = FileSearchRes[i];
            doc.Load(FileSearchRes[i]);
            List<string> name = new List<string>();
            var accountNodes = doc.GetElementsByTagName("FpcBlock");
            for (int j = 0; j < accountNodes.Count; j++)
            {
                var account = accountNodes[j].SelectSingleNode("./FPC");
                if (account != null && account.Attributes != null)
                {
                    // Read node attribute
                    name.Add(account.Attributes["Name"].Value + account.Attributes["Value"].Value);
                }
            }
                i++;            
        }

我正在尝试从如下所示的 xml 文件中读取:

<FpcBlock Version="01">
        <FPC Name="1" Value="A" Updated="false" />
        <FPC Name="3" Value="B" Updated="false" />
        <FPC Name="5" Value="B" Updated="false" />
        <FPC Name="8" Value="B" Updated="false" />
        <FPC Name="10" Value="B" Updated="false" />
</FpcBlock>

问题出在一行:

var accountNodes = doc.GetElementsByTagName("FpcBlock");

accountnodes 的计数为 1,这是不正确的,因为我有更多节点。因此,只有第一个节点被添加到名称中。我做错了什么?

编辑:对不起,如果我感到困惑。我想将下面的所有行保存在一个列表中。我想要的是列表应该是这样的:

1A
3B
5B

等等。所以我保存名称和值。但目前我只得到第一行 1A。

编辑 nr 2: 我误解了GetElementsByTagName() 方法。改成GetElementsByTagName("FPC") 应该是问题所在。

【问题讨论】:

  • 您的 XML 只有一个 FpcBlock 元素。不清楚为什么你认为你应该得到不止一个,而只有一个。你的例子不完整吗?
  • 好像我有点困惑抱歉。我想要在 下编写的所有内容。所以我想要下面的所有 5 行
  • 那为什么不GetElementsByTagName("FPC"),因为他们是你真正想要的?
  • 哇,我误解了 GetElementsByTagName() 方法。谢谢你解决了我的问题!

标签: c# xml xml-parsing xmldocument getelementsbytagname


【解决方案1】:

您正在查询名为 FpcBlock 的元素,但似乎正在期待名为 FPC 的元素。如果您更改为查找您实际尝试查找的元素,那么您可能会发现问题消失了。

也就是说,LINQ to XML 是一种比旧的XmlDocument API 更现代、更简洁的 API。使用这个会更好:

var nameValues = 
    from fpc in doc.Descendants("FPC")
    select new
    {
        Name = (int) fpc.Attribute("Name"),
        Value = (string) fpc.Attribute("Value")
    };

请参阅this fiddle 以获得工作演示。

【讨论】:

  • 非常感谢。我试过这个,它就像一个魅力。我会将您的帮助标记为答案。
猜你喜欢
  • 1970-01-01
  • 2011-09-07
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多