Я получаю ответ http \ xml и анализирую для вывода файла csv.Я могу сделать это, если есть только один ответ, но когда более 1 каждого узла он анализирует все одно и то же имя 1-го узла, то все одноименные 2-го узла и т. Д., А не узел 1, узел 2, узел 1, узел 2. Что яуродлив, и я уверен, что может быть написано лучше.Мой простой вопрос - как обвести этот цикл так, чтобы он возвращал только один набор данных за раз, или я собираюсь объединить все forEachs, поскольку xpaths вводят операторы значений для каждого цикла?Или я должен использовать другую технологию, такую как XMLReader или что-то еще?Файл XML
<?xml version="1.0" encoding="UTF-8" ?>
<multistatus xmlns="DAV:">
<response>
<href>http://192.168.0.2:80/User-84</href>
<propstat>
<prop>
<handle>
<dsref handle="User-84"><displayname>George Thurogood</displayname>
<firstname>George</firstname>
<lastname>Thurogood</lastname>
<username>cz001234</username>
</dsref>
</handle>
<email>george@lab.local</email>
<isActive>1</isActive>
<domain>Lab.local</domain>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<firstname/>
<lastname/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>http://192.168.0.2:80/User-83</href>
<propstat>
<prop>
<handle>
<dsref handle="User-83">
<displayname>Molly Meldrum</displayname>
<firstname>Molly</firstname>
<lastname>Meldrum</lastname>
<username>cz026381</username>
</dsref>
</handle>
<email>molly@lab.local</email>
<isActive>1</isActive>
<domain>Lab.local</domain>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<firstname/>
<lastname/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
код, который я сейчас использую
if (response.StatusCode == HttpStatusCode.OK)
{
}
response.Close();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(responseString);P
responseString = "";
//create the namespace manager
var nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("DAV", "DAV:");
XmlNodeList elemList = xmlDoc.SelectNodes("//DAV:prop", nsmgr);
foreach (XmlNode node in xmlDoc.SelectNodes("//DAV:prop/DAV:handle/DAV:dsref", nsmgr))
{
strNode = node.Attributes["handle"].Value;
strFNnode =
//strNode = strNode + " - " + node.InnerText;
//responseString += strNode + " , " + "\r\n";
}
foreach (XmlNode node in xmlDoc.SelectNodes("//DAV:prop/DAV:handle/DAV:dsref/DAV:displayname", nsmgr))
{
//strNode = node.Attributes["handle"].Value;
strNode = strNode + "," + node.InnerText;
//responseString += strNode + " , " + "\r\n";
}
foreach (XmlNode node in xmlDoc.SelectNodes("//DAV:prop/DAV:handle/DAV:dsref/DAV:firstname", nsmgr))
{
//strNode = node.Attributes["handle"].Value;
strNode = strNode + "," + node.InnerText;
// responseString += strNode + " , " + "\r\n";
}
foreach (XmlNode node in xmlDoc.SelectNodes("//DAV:prop/DAV:handle/DAV:dsref/DAV:lastname", nsmgr))
{
//strNode = node.Attributes["handle"].Value;
strNode = strNode + "," + node.InnerText;
// responseString += strNode + " , " + "\r\n";
}
foreach (XmlNode node in xmlDoc.SelectNodes("//DAV:prop/DAV:handle/DAV:dsref/DAV:username", nsmgr))
{
//strNode = node.Attributes["handle"].Value;
strNode = strNode + "," + node.InnerText;
// responseString += strNode + " , " + "\r\n";
}
foreach (XmlNode node in xmlDoc.SelectNodes("//DAV:prop/DAV:email", nsmgr))
{
//strNode = node.Attributes["handle"].Value;
strNode = strNode + "," + node.InnerText;
// responseString += strNode + " , " + "\r\n";
}
foreach (XmlNode node in xmlDoc.SelectNodes("//DAV:prop/DAV:isActive", nsmgr))
{
//strNode = node.Attributes["handle"].Value;
strNode = strNode + "," + node.InnerText;
// responseString += strNode + "," + "\r\n";
}
foreach (XmlNode node in xmlDoc.SelectNodes("//DAV:prop/DAV:domain", nsmgr))
{
//strNode = node.Attributes["handle"].Value;
strNode = strNode + "," + node.InnerText;
responseString += strNode + "\r\n";
}
return temp;
Это должно вернуть
User-84,George Thurogood,George,Thurogood,cz001234,george@lab.local,1,lab.local
User-83,Molly Meldrun,Molly,Meldrum,cz026381,Molly@lab.local,1,lab.local