このXMLファイルで必要なノードを取得するための適切なXPATH構文を見つけるのに問題があります。1つは、XMLにNameSPaceがないため、コードに1つ追加する必要があります。これは私の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の場合、「CONFIGURATION」要素で「NAme」NODE値を取得する場合は、次のXPATHを使用すると想定します。
/configuration/name
しかし時々私はそれにns:を追加する必要があります:
/ns:configuration/ns:name
そして、私は次のように要素値を見つけることができます:
while (xmlNodeIterator.MoveNext()) {
result += xmlNodeIterator.Current.SelectSingleNode("name", nsmgr).ToString();
}
しかし、これは私にはまったく機能していません。どのxpathを試しても、XMLに値は見つかりません。これが私のコードです:
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構文について提案したりできますか?
ありがとう。