首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用LINQ生成顺序属性值?

如何使用LINQ生成顺序属性值?
EN

Stack Overflow用户
提问于 2018-04-12 16:11:04
回答 1查看 23关注 0票数 1

我有一些xml文件的格式如下所示,或者可能略有不同

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE PARTS SYSTEM "parts.dtd">
<?xml-stylesheet type="text/css" href="xmlpartsstyle.css"?>
<PARTS>
    <TITLE>Computer Parts</TITLE>
    <ASST>
        <PART no="xs@@">
            <ITEM>Motherboard</ITEM>
            <MANUFACTURER>ASUS</MANUFACTURER>
            <MODEL ver="v-@@@@">P3B-F</MODEL>
            <COST>123.00</COST>
        </PART>
        <PART no="xs@@">
            <ITEM>Video Card</ITEM>
            <MANUFACTURER>ATI</MANUFACTURER>
            <MODEL ver="v-@@@@">All-in-Wonder Pro</MODEL>
            <COST>160.00</COST>
        </PART>
        <PART no="xs@@">
            <ITEM>Sound Card</ITEM>
            <MANUFACTURER>Creative Labs</MANUFACTURER>
            <MODEL ver="v-@@@@">Sound Blaster Live</MODEL>
            <COST>80.00</COST>
        </PART>
    </ASST>
</PARTS>

我试图以顺序的方式生成节点<PART>的属性值,即、no、<MODEL>,即ver,从值1开始,然后从下一个<PART>节点增加+1。因此,基本上所需的输出应该如下所示

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE PARTS SYSTEM "parts.dtd">
<?xml-stylesheet type="text/css" href="xmlpartsstyle.css"?>
<PARTS>
    <TITLE>Computer Parts</TITLE>
    <ASST>
        <PART no="xs1">
            <ITEM>Motherboard</ITEM>
            <MANUFACTURER>ASUS</MANUFACTURER>
            <MODEL ver="v-1">P3B-F</MODEL>
            <COST>123.00</COST>
        </PART>
        <PART no="xs2">
            <ITEM>Video Card</ITEM>
            <MANUFACTURER>ATI</MANUFACTURER>
            <MODEL ver="v-2">All-in-Wonder Pro</MODEL>
            <COST>160.00</COST>
        </PART>
        <PART no="xs3">
            <ITEM>Sound Card</ITEM>
            <MANUFACTURER>Creative Labs</MANUFACTURER>
            <MODEL ver="v-3">Sound Blaster Live</MODEL>
            <COST>80.00</COST>
        </PART>
    </ASST>
</PARTS>

那么,使用LINQ最简单的方法是什么呢?

我试着像

代码语言:javascript
复制
string filecontent=File.ReadAllText(@"C:\Users\Desktop\12-apr.xml");
XDocument xml=XDocument.Parse(filecontent);
var parts=xml.Descendants("PART");
var models=xml.Descendants("PART").Elements("MODEL");
foreach (var part in parts)
{
    for (int i = 0; i < parts.Count(); i++)
    {
        part.Attribute("no").Value="xs"+i.ToString();
    }

}
foreach (var model in models)
{
    for (int i = 0; i < parts.Count(); i++)
    {
        model.Attribute("ver").Value="v-"+i.ToString();
    }

}
xml.Save(@"C:\Users\Desktop\12-apr.xml");
Console.ReadLine();

但这不是我想要的..。我的代码产生的输出

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE PARTS SYSTEM "parts.dtd"[]>
<?xml-stylesheet type="text/css" href="xmlpartsstyle.css"?>
<PARTS>
  <TITLE>Computer Parts</TITLE>
  <ASST>
    <PART no="xs2">
      <ITEM>Motherboard</ITEM>
      <MANUFACTURER>ASUS</MANUFACTURER>
      <MODEL ver="v-2">P3B-F</MODEL>
      <COST>123.00</COST>
    </PART>
    <PART no="xs2">
      <ITEM>Video Card</ITEM>
      <MANUFACTURER>ATI</MANUFACTURER>
      <MODEL ver="v-2">All-in-Wonder Pro</MODEL>
      <COST>160.00</COST>
    </PART>
    <PART no="xs2">
      <ITEM>Sound Card</ITEM>
      <MANUFACTURER>Creative Labs</MANUFACTURER>
      <MODEL ver="v-2">Sound Blaster Live</MODEL>
      <COST>80.00</COST>
    </PART>
  </ASST>
</PARTS>

帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-12 16:17:38

你没有明显的理由有嵌套循环..。您要为每个元素设置属性多次,而不是为每个元素设置属性一次。

一旦你摆脱了嵌套的循环,这就很简单了。但是,如果将查询具体化到列表,则会更简单。下面是一个生成所需输出的完整示例:

代码语言:javascript
复制
using System;
using System.Linq;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        var xml = XDocument.Load("input.xml");
        var parts = xml.Descendants("PART").ToList();
        var models = xml.Descendants("PART").Elements("MODEL").ToList();

        for (int i = 0; i < parts.Count; i++)
        {
            parts[i].Attribute("no").Value = $"xs{i+1}";
        }

        for (int i = 0; i < models.Count; i++)
        {
            models[i].Attribute("ver").Value = $"v-{i+1}";
        }

        xml.Save("output.xml");
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49801319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档