Я борюсь за десериализацию следующего XML:
<?xml version="1.0" encoding="utf-8" ?>
<conf name="settings">
<item name="lorem"
one="the"
two="quick"
three="brown"
four="fox"
five="jumps"
six="over"
seven="the"
eight="lazy"
nine="dog"
/>
<item name="ipsum"
one="how"
two="many"
three="roads"
four="must"
five="a"
six="man"
seven="walk"
eight="down"
nine="?"
/>
</conf>
надеясь сделать это самым элегантным и лаконичным способом, используя LINQ-to-XML, но, учитывая, что я не самый умный парень в городе, когда дело доходит до вложенных методов, типов вывода, обобщенных типов и т. Д., Я подумал было бы неплохо спросить, если кто-нибудь из вас, ребята, хотел бы пойти дальше и показать мне некоторую грамотность LINQ:)
Прямо сейчас для каждого значения я делаю что-то вроде:
XDocument config = XDocument.Load("whatever.conf");
var one = from q in config.Descendants("item")
select (string)q.Attribute("one");
var two = from q in config.Descendants("item")
select (string)q.Attribute("two");
И Я знаю Я полностью упускаю суть, не только потому, что я там повторяюсь, но и потому, что запросы работают только тогда, когда есть только один элемент, и снова, если у вас есть Любой комментарий или предложение было бы очень ценно.
Большое спасибо заранее!
ОБНОВЛЕНИЕ: в случае, если, возможно, предыдущий пример не очень помог, вот более реалистичный сценарий:
<?xml version="1.0" encoding="utf-8" ?>
<conf name="ftp-settings" freq="daily" time="23:00">
<item name="isis"
host="10.10.1.250"
user="jdoe"
pass="4/cB0kdFGprXR/3oTs8mtw=="
file="backup.tar.gz"
path="/var/log"
/>
<item name="seth"
host="10.10.2.250"
user="jdoe"
pass="4/cB0kdFGprXR/3oTs8mtw=="
file="backup.tar.gz"
path="/var/log"
/>
</conf>
Поэтому для каждого из этих элементов я хотел бы сгенерировать переменные, чтобы я мог передать их в качестве параметров для какого-либо метода управления FTP.
РЕШИТЬ:
Это было так же просто, как сделать foreach :
var elements = from element in xml.Descendants("item") select element;
foreach (XElement item in elements) {
ftp.DownloadFile(
item.Attribute("host").Value,
item.Attribute("user").Value,
item.Attribute("pass").Value,
item.Attribute("file").Value,
item.Attribute("path").Value
);
}