c# - 如何使节点成为 ParentNode?
问题描述
我正在从我的 xml 文件中提取数据集以在新文件中对其进行排序。为了完成这一点,我需要使节点成为父节点(以便能够根据属性 Feldsatz= 读出值)。我尝试了几件事,但没有正常工作。我的项目基于 c# for unity3D。如果有人对我有建议,那就太棒了。
预期结果:
<?xml version="1.0" encoding="UTF-8"?>
-<Field Type="ftProtect">
<Area Feldsatz="1">
-<UserPointList>
<UserPoint Contour="FALSE" Distance="57" Angle="0"/>
...
</UserPointList>
<Area/>
<Area Feldsatz="2"/>
-<UserPointList>
<UserPoint Contour="FALSE" Distance="57" Angle="0"/>
...
</UserPointList>
<Area/>
</Field>
实际结果:
<?xml version="1.0" encoding="UTF-8"?>
-<Field Type="ftProtect">
<Area Feldsatz="1"/>
-<UserPointList>
<UserPoint Contour="FALSE" Distance="57" Angle="0"/>
..
</UserPointList>
<Area Feldsatz="2"/>
-<UserPointList>
<UserPoint Contour="FALSE" Distance="57" Angle="0"/>
...
</UserPointList>
</Field>
代码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using UnityEngine;
public class XML_divide_new : MonoBehaviour
{
void Start()
{
//Definition of Parameters
const string FILENAME = @"C:\Users\micha\Desktop\Thesis\Unity\ganzes Projekt_2\Assets\Resources\Feldsatz.xml";
const string OUTPUT_FOLDER = @"C:\Users\micha\Desktop\Thesis\Unity\ganzes Projekt_2\Assets\Resources\";
const string IDENT = "<?xml version=\"1.0\"?>";
XDocument doc = XDocument.Load(FILENAME);
XDocument newDoc = null;
//List for the "Feldlisten"
List<XElement> areas = doc.Descendants("Area").ToList();
//Counter for the "Feldlisten"
int counter = 1;
//Grouping of Fieldtypes
var groups = areas.Descendants("Field").GroupBy(x => (string)x.Attribute("Type")).ToList();
foreach (var group in groups)
{
string type = group.Key;
//Introduce the field node
XElement field = new XElement("Field", new XAttribute("Type", type));
//Implement Header and Ident
newDoc = XDocument.Parse(IDENT + field.ToString());
XElement root = newDoc.Root;
foreach (XElement userPointList in group.Descendants("UserPointList"))
{
//Introduce the area node
XElement number = new XElement("Area", new XAttribute("Feldsatz", counter));
//Add "Feldsatznummer" and Datasets; divided by Indexnumbers
root.Add(number);
root.Add(userPointList);
counter = counter + 1;
}
//Zero Counter
counter = 1;
//Filename
string filename = string.Format("{0}.xml", type);
//Save File
newDoc.Save(OUTPUT_FOLDER + filename);
}
}
}
原始 XML 文件:
<?xml version="1.0" encoding="WINDOWS-1252"?>
-<AreaList DeviceType="sctS300" FieldIntrusion="triple" Resolution="0,5">
-<Area CoordinatesType="polar" Name="Feldsatz 1" Index="0">
-<FieldList>
-<Field Type="ftProtect">
-<UserPointList>
<UserPoint Contour="FALSE" Distance="57" Angle="0"/>
...
</UserPointList>
</Field>
-<Field Type="ftWarn">
-<UserPointList>
<UserPoint Contour="FALSE" Distance="71" Angle="0"/>
...
</UserPointList>
</Field>
<Field Type="ftWarn2"/>
</FieldList>
</Area>
-<Area CoordinatesType="polar" Name="Feldsatz 2" Index="1">
-<FieldList>
-<Field Type="ftProtect">
-<UserPointList>
<UserPoint Contour="FALSE" Distance="57" Angle="0"/>
...
</UserPointList>
</Field>
-<Field Type="ftWarn">
-<UserPointList>
<UserPoint Contour="FALSE" Distance="71" Angle="0"/>
...
</UserPointList>
</Field>
<Field Type="ftWarn2"/>
</FieldList>
</Area>
</AreaList>
解决方案
在不进入所有代码的情况下,在我看来,您当前正在添加仅包含属性的已创建空 Area
元素,number
然后userPointList
将root
Field
//Introduce the area node
XElement number = new XElement("Area", new XAttribute("Feldsatz", counter));
//Add "Feldsatznummer" and Datasets; divided by Indexnumbers
root.Add(number);
root.Add(userPointList);
如果我理解正确,目标是让它们再次嵌套
//Introduce the area node
XElement number = new XElement("Area", new XAttribute("Feldsatz", counter));
// Add the UserPointList nested under the Area element
number.Add(userPointList);
//Add "Feldsatznummer" and Datasets; divided by Indexnumbers
root.Add(number);
推荐阅读
- mysql - 如何执行左连接,以便从左表中获取每条记录,而不管右表上的条件如何
- office-ui-fabric - 如何在fluentui(office ui fabric)中创建一个“危险”按钮?
- sql - 订单中的所有捆绑产品(订单项目列表)
- ios - 添加项目时出现 Xamarin IOS 链接器错误
- azure - 如果文件中不包含“azuremediaplayer.min.js”,Azure 媒体播放器将不起作用
- java - src.type() == CV_8UC1 断言在校正图像时失败
- sql - 是否可以使用 ANALYZE 表指令创建过程?
- excel - 在执行 Office 脚本操作中指定 Excel 文件时出现问题
- python - 如何在 Python 中打印一条语句以显示对 Pandas Dataframe 的数学运算结果?
- c# - Blazor 在提交表单数据之前执行逻辑