среды: VS 2010, .NET 3.5Получение Неверное значение Разбор XML в C#
Я работаю над проектом, который извлекает данные из веб-службы RESTful. Почти все работает правильно, кроме одного раздела, где он получает неправильные значения.
Вот образец XML используется в этой части кода:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<dataprovider>
<id>DP6</id>
<name>Query 1</name>
<dataSourceId>96390</dataSourceId>
<dataSourcePrefix>DS6</dataSourcePrefix>
<updated>2014-08-25T16:51:38.000-04:00</updated>
<duration>1</duration>
<isPartial>false</isPartial>
<rowCount>13</rowCount>
<flowCount>1</flowCount>
<dictionary>
<expression qualification="Dimension" dataType="String">
<id>DP6.DOa6</id>
<name>City</name>
<description>City located.</description>
<dataSourceObjectId>DS6.DOa6</dataSourceObjectId>
<formulaLanguageId>[City]</formulaLanguageId>
</expression>
</dictionary>
</dataprovider>
А вот код:
private void loadElements(List<string> dps, int rptId)
{
string name = string.Empty;
string id = string.Empty;
string elementUrl = baseUrl + string.Format(C_WEBI_URL, rptId) + C_DP_URL;
foreach (string dpId in dps)
{
XmlDocument dpXml = getResponse(elementUrl + "/" + dpId);
//get the Expression nodes that define the objects on the report
XmlNodeList elementNodes = dpXml.SelectNodes("//expression");
if (elementNodes != null)
{
foreach (XmlNode node in elementNodes)
{
id = node.SelectSingleNode("//dataSourceObjectId").InnerText;
if (!elements.ContainsKey(id))
{
name = node.SelectSingleNode("//name").InnerText;
elements.Add(id, name);
}
}
}
}
}
Я ожидаю, чтобы получить значение «DP6.DOa6» из dataSourceObjectId, но он возвращает только «DP6». И я ожидаю получить значение «Город» от имени, но он возвращает «Запрос 1». Когда я тестирую XPath с вышеуказанным XML на http://www.xpathtester.com/xpath, я получаю правильные значения, но он не работает в моем коде.
Любые мысли?
Проблемы с именем запросом, что объект XmlNode сохраняет внешний xml, поэтому, когда вы говорите '// name', он вернет первый элемент имени, который он находит в документе. Я не могу найти пример того, как сделать это правильно прямо сейчас, иначе я бы опубликовал ответ. – Phaeze
Что касается dataSourceObjectId, мое подозрение в том, что '.' вызывает это поведение, возможно, попробуйте' InnerXml' вместо 'InnerText' – Phaeze