我有一些xml文件,格式如下所示,或者可能略有不同<?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>即没有和<MODEL>即版本以顺序方式从值1开始,然后通过1从下一递增<PART>节点。因此,基本上所需的输出应如下所示<?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-to-XML做到这一点的最简单方法是什么?
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
您没有明显的原因就拥有嵌套循环……您要为每个元素多次设置属性,而不是为每个元素设置一次属性。
一旦摆脱了嵌套循环,就很简单了。但是,如果您将查询具体化为列表,则更为简单。这是产生所需输出的完整示例:
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 回答
- 0 关注
- 161 浏览
添加回答
举报
0/150
提交
取消