gpt4 book ai didi

c# - 使用 C# 解析 XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:57 25 4
gpt4 key购买 nike

我有一个 XML 文件如下:
XML file

我上传了 XML 文件:http://dl.dropbox.com/u/10773282/2011/result.xml .它是机器生成的 XML,因此您可能需要一些 XML 查看器/编辑器。

我使用此 C# 代码获取 CoverageDSPriv/Module/* 中的元素.

using System;
using System.Xml;
using System.Xml.Linq;

namespace HIR {
class Dummy {

static void Main(String[] argv) {

XDocument doc = XDocument.Load("result.xml");

var coveragePriv = doc.Descendants("CoverageDSPriv"); //.First();
var cons = coveragePriv.Elements("Module");

foreach (var con in cons)
{
var id = con.Value;
Console.WriteLine(id);
}
}
}
}

运行代码,我得到了这个结果。

hello.exe6144008016161810hello.exehello.exehello.exe81061hello.exehello.exe!17main_main40030170170010180180011190190012200200013hello.exe!107testfunctiontestfunction(int)40131505001460600158080216120120017140140018AA

我希望得到

hello.exe
61440
...

但是,我只得到一行长字符串。

  • 问题 1:可能出了什么问题?
  • Q2:如何获取cons中元素的#?我试过 cons.Count , 但它不起作用。
  • 问题 3:如果我需要获取 <CoverageDSPriv><Module><ModuleNmae> 的嵌套值我使用这段代码:

    var coveragePriv = doc.Descendants("CoverageDSPriv");//。第一的();var cons = coveragePriv.Elements("Module").Elements("ModuleName");

我可以接受这一点,但如果元素嵌套很深,我可能希望有直接的方法来获取元素。还有其他方法吗?

已添加

var cons = coveragePriv.Elements("Module").Elements();

解决了这个问题,但是对于 NamespaceTable , 它再次打印出一行中的所有元素。

hello.exe
61440
0
8
0
1
6
1
61810hello.exehello.exehello.exe81061hello.exehello.exe!17main_main40030170170010180180011190190012200200013hello.exe!107testfunctiontestfunction(int)40131505001460600158080216120120017140140018

或者,Linq to XML 可能是更好的解决方案,如 this post .

最佳答案

在我看来你只有一个名为 Module 的元素-- 所以 .Value只是向您返回整个元素的 InnerText。你是故意的吗?

coveragePriv.Element("Module").Elements();

这将返回 Module 的所有子元素元素,这似乎是你所追求的。

更新:

<NamespaceTable><Module> 的 child 但你似乎想像 <Module> 一样处理它因为你想写出每个子元素。因此,一种蛮力方法是为 <NamespaceTable> 添加另一个循环。 :

foreach (var con in cons)
{
if (con.Name == "NamespaceTable")
{
foreach (var nsElement in con.Elements())
{
var nsId = nsElement.Value;
Console.WriteLine(nsId);
}
}
else
{
var id = con.Value;
Console.WriteLine(id);
}
}

或者,也许您更愿意通过 .Descendents() 将它们完全反规范化。 :

var cons = coveragePriv.Element("Module").Descendents();

foreach (var con in cons)
{
var id = con.Value;
Console.WriteLine(id);
}

关于c# - 使用 C# 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com