У меня проблемы с поиском правильного синтаксиса XPATH для получения нужных мне узлов с этим XML-файлом. Во-первых, в XML нет NameSPace, поэтому я должен добавить его в код. Я думаю, что это влияет на мой XPATH.
У меня есть XML-файл, который выглядит следующим образом:
<configuration xmlns="http://schemas.microsoft.com/support/2003/02/config">
<name>Content</name>
<description>Desc</description>
<lastModifiedBy>Me</lastModifiedBy>
<lastModifiedDate>2011-04-18T14:05:00</lastModifiedDate>
<section name="MaintenanceNotices">
<key name="MaintenanceNote1" value="The Title Value" />
<link id="1234" type="5" href="" target="_self" name="MaintenanceNote1a">
<description>Description</description>
</link>
</section>
</configuration>
Итак, для XPATH, если я хочу получить значение NODE «NAme» в элементе «CONFIGURATION», я предполагаю, что я использовал бы этот XPATH:
/configuration/name
но иногда мне нужно добавить ns: к нему:
/ns:configuration/ns:name
И тогда я могу найти значение элемента следующим образом:
while (xmlNodeIterator.MoveNext()) {
result += xmlNodeIterator.Current.SelectSingleNode("name", nsmgr).ToString();
}
Но это не работает для меня вообще. Он не найдет никаких значений в XML, независимо от того, какой xpath я пробую. Вот мой код:
private string GetXML()
{
string result = string.Empty;
string fileName = "Content.xml";
string filePath = "C:\\Content\\{0}";
XPathDocument xdoc = new XPathDocument(string.Format(filePath, fileName));
var nav = xdoc.CreateNavigator();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("ns", "http://schemas.microsoft.com/taxonomy/2003/1");
nsmgr.AddNamespace("gds", "http://support.microsoft.com/common/schemas/gdsPage/1/");
string sectionName = "MaintenanceNotices";
string xpath = "/configuration";
// section[name={0}]"; ///key[name=MaintenanceNote1]/";
XPathNodeIterator xmlNodeIterator = nav.Select(string.Format(xpath, sectionName), nsmgr);
while (xmlNodeIterator.MoveNext())
{
result += xmlNodeIterator.Current.SelectSingleNode("name", nsmgr).ToString();
}
return result;
}
Можете ли вы увидеть какие-либо проблемы или предложить мой синтаксис Xpath?
Спасибо.