c# - 需要有关在 .NET 4 中解析 XML 的信息

标签 c# .net xml linq-to-xml

我对 XML 和使用 C# 解析它还很陌生。我正在尝试解析如下所示的 XML 文档:

<Msg Version="1.0">
  <ProgList>
    <update sequence="41248" amount="3327" Lvl="1" Grp="1" />
    <update sequence="41216" amount="5326" Lvl="2" Grp="1" />
    <update sequence="41252" amount="7326" Lvl="3" Grp="1" />
  </ProgList>
</Msg>

我正在尝试使用 XDocument,但似乎无法解析出具有属性的三个更新。

但是,如果我以这种形式创建包含相同数据的 XML 文档:

<Msg Version="1.0">
    <ProgList>
        <Level>
            <seq>41248</seq>
            <amount>3327</amount>
            <Lvl>1</Lvl>
            <Grp>1</Grp>
        </Level>
        <Level>
            <seq>41216</seq>
            <amount>5326</amount>
            <Lvl>2</Lvl>
            <Grp>1</Grp>
        </Level>
        <Level>
            <seq>41252</seq>
            <amount>7326</amount>
            <Lvl>3</Lvl>
            <Grp>1</Grp>
        </Level>
    </ProgList>
</Msg>

我可以使用以下代码解析和遍历关卡数据:

String xmlText = String.Empty;
//String xml = String.Empty;
int begin = Data.IndexOf("<?xml");
int end = Data.IndexOf("</Msg") + 6;

try
{
    //xml = Data.Substring(begin, end - begin);
}
catch { };

String xml = 
@"<Msg Version='1.0'>
                                <ProgList>
                                    <Level>
                                        <seq>41248</seq>
                                        <amount>3327</amount>
                                        <Lvl>1</Lvl>
                                        <Grp>1</Grp>
                                    </Level>
                                    <Level>
                                        <seq>41216</seq>
                                        <amount>5326</amount>
                                        <Lvl>2</Lvl>
                                        <Grp>1</Grp>
                                    </Level>
                                    <Level>
                                        <seq>41252</seq>
                                        <amount>7326</amount>
                                        <Lvl>3</Lvl>
                                        <Grp>1</Grp>
                                    </Level>
                                </ProgList>
</Msg>";



try
{
    XDocument xmlDoc = XDocument.Parse(xml);

    var updates = from x in xmlDoc.Descendants("Level")
                    select new
                    {
                        seq = x.Descendants("seq").First().Value,
                        amt = x.Descendants( "amount" ).First().Value,
                        lvl = x.Descendants("Lvl").First().Value,
                        grp = x.Descendants("Grp").First().Value
                    };

    foreach (var x in updates)
    {
        String output = String.Format("{0}SEQ: {1} AMT: {2} LVL: {3} GRP: {4}",
                                Environment.NewLine, x.seq, x.amt, x.lvl, x.grp);
    }

我将如何解析第一个 XML 文档样式?

最佳答案

使用 Attribute Method而不是 Descendants Method :

var updates = from x in xmlDoc.Root.Element("ProgList").Elements("update")
              select new
              {
                  seq = (int)x.Attribute("sequence"),
                  amt = (int)x.Attribute("amount"),
                  lvl = (int)x.Attribute("Lvl"),
                  grp = (int)x.Attribute("Grp"),
              };

关于c# - 需要有关在 .NET 4 中解析 XML 的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8349681/

相关文章:

c# - 我可以在我的 Site.Master 页面 MVC 上继承一些东西吗?

c# - 在 WPF 应用程序中应用 MVVM 模式

c# - 从两台机器调用 C++ dll

xml - 如何使用 XPath 选择具有最长子 #text 节点值的 XML 节点?

c# - 有多个根元素。 1号线,位置369

c# - 如何确定html中每个节点的css文本

c# - 使用 Excel-DNA,如何区分 Excel 加载项函数调用中未指定的参数和缺失的参数?

c# - 那里有好的第三方 EDMX 生成器/更新器工具吗?

java - 通过Java创建交换通用通讯组

c# - 使用 C# 解析通用 XML 字符串