私はコンピュータ診断セッションからかなり大きなXMLファイルを持っています。私の目標は、テスト結果データを取得し、それを顧客のためにPDFにポンピングすることです。 XMLに関する経験はほとんどありませんが、これは大きな問題になります。ここで XMLでカスタムネームスペースで子ノードを取得する
は、文書のサンプルです:<pcd:DiagLog xmlns="http://www.pc-doctor.com/2004/8/diagLogger"
xmlns:pcd="http://www.pc-doctor.com/2004/8/diagLogger"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.pc-doctor.com/2004/8/diagLogger
http://www.pc-doctor.com/2004/8/diagLogger/diagLogger.xsd">
<Application>
<version>6.0.6818.10</version>
<Start>
<Time hour="04" minute="14" second="01" millisecond="34" month="10" day="15" year="2016" utcOffset="-480">2016-10-15T04:14:01.034-08:00</Time>
</Start>
<OS>Windows 10 Service Pack 0 PE x86 32-bit</OS>
</Application>
.......
<DiagInfo>
....
<TestResult EnglishResult="PASS">
....
</TestResult>
</DiagInfo>
あり</Application>
と<DiagInfo>
の間に数千行がありますが、私は<DiagInfo>
と<TestResult>
で見つかった情報を持つ唯一の心配です。
私は単にによってノードをつかむことができると思った:
XmlDocument doc = new XmlDocument();
doc.Load(xmlFilePath);
XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("pcd", "http://www.pc-doctor.com/2004/8/diagLogger");
XmlNodeList xnList = doc.SelectNodes("/pcd:DiagLog/DiagInfo", manager);
しかし、これは空のリストを返しています。私がNamespace Manager or XsltContext neededを参照すると、が表示されます私はそれを正しくやっていますが、私は正しく名前空間を追加することを理解しているとは思いません。ルート要素を<pcd:DiagLog>
の代わりに<Diagnostics></Diagnostics>
に変更し、試してみます:doc.SelectNodes("/Diagnostics/DiagInfo", manager);
自分のノードリストに値が設定されています。
名前空間がどこにあるのか誰にでも分かりますか?
@Tomalakこれはコピー/貼り付けのエラーです。コードとURIが一致していることを確認しました。 –