Я новичок в LINQ и XML, но я смог разобрать основной XML-файл без проблем. Однако я попал в ситуацию, когда у меня есть дублирующие элементы внутри потомка, и мне нужна вся информация из дубликатов. Мой XML выглядитC# синтаксический анализ XML-документа с LINQ, где существует различное количество повторяющихся элементов
<?xml version="1.0" encoding="utf-8" ?>
<Catalog>
<Macros>
<Page>
<HLF></HLF>
<ML>MCP</ML>
<Name>2</Name>
<Macro_Name>Pages\Spare_Page.emp</Macro_Name>
</Page>
<Window>
<HLF></HLF>
<ML>MCP</ML>
<Name>2</Name>
<Macro_Name>RAF\MOTOR_MACRO.ema</Macro_Name>
<Variant>A</Variant>
<PlaceHolder>
<ValueSet>1</ValueSet>
</PlaceHolder>
<PlaceHolder>
<ValueSet>2</ValueSet>
</PlaceHolder>
</Window>
<Window>
<HLF></HLF>
<ML>MCP</ML>
<Name>2</Name>
<Macro_Name>RAF\MOTOR_MACRO.ema</Macro_Name>
<Variant>A</Variant>
<PlaceHolder>
<ValueSet>1</ValueSet>
</PlaceHolder>
<PlaceHolder>
<ValueSet>2</ValueSet>
</PlaceHolder>
<PlaceHolder>
<ValueSet>3</ValueSet>
</PlaceHolder>
</Window>
</Macros>
</Catalog>
Как вы можете видеть, у меня есть 2 различных типов макросов, которые я могу получить доступ индивидуально без проблем. Проблема возникает, когда я пытаюсь выполнить итерацию через макросы окна и перейти в раздел «PlaceHolder».
var WinMacro = from w in xDoc.Descendants("Window")
select new
{
PG_HLF = w.Element("HLF").Value,
PG_ML = w.Element("ML").Value,
PG_Name = w.Element("Name").Value,
MacroName = w.Element("Macro_Name").Value,
MacroVariant = w.Element("Variant").Value,
Placeholder = w.Element("PlaceHolder"),
};
Как я могу получить доступ и сохранить все значения с каждым держателем макроса?
@octavioccl С тех пор я добавил слой сложности. Я надеюсь, что вы сможете помочь. Я думал, что ответ был концом этого, но теперь кажется, что мне нужно, чтобы в XML был атрибут, который мне тоже нужно сохранить. Каждый элемент-заполнитель будет иметь также атрибут name,. Мне нужно, чтобы оба значения вместе в объекте могли ссылаться позже. Было бы целесообразно сохранить их в словаре или просто сохраните их как массив Xelements, к которому я могу обратиться позже? –
Tom
Через пробную версию и ошибку я ответил на свой вопрос, я изменил свой оператор select на Placeholder = w.Elements («PlaceHolder»). Выберите (e => new {Name = e.Attribute ("name"). Value, Value = e.Value}) ToList() Теперь я могу легко получить доступ к имени и значению позже. – Tom