名前属性値でノードを検索しようとしています。ここでXPathを使用して名前属性値のノードを検索します
は、XML文書のサンプルです:ここで
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE kfx:XMLRELEASE SYSTEM "K000A004.dtd">
<kfx:XMLRELEASE xmlns:kfx="http://www.kofax.com/dtd/">
<kfx:KOFAXXML>
<kfx:BATCHCLASS ID="00000008" NAME="CertficateOfLiability">
<kfx:DOCUMENTS>
<kfx:DOCUMENT DOCID="00000006" DOCUMENTCLASSNAME="COL">
<kfx:DOCUMENTDATA>
<kfx:DOCUMENTFIELD NAME="Producer Name" VALUE="Howalt+McDowell Insurance" />
...
....
は私が試み式です:
var xml = XDocument.Load(new StreamReader("C:\\Users\\Matthew_cox\\Documents\\test.xml"));
XNamespace ns = "http://www.kofax.com/dtd/";
XmlNamespaceManager nsm = new XmlNamespaceManager(xml.CreateNavigator().NameTable);
nsm.AddNamespace("kfx", ns.NamespaceName);
var docs = xml.Descendants(ns + "DOCUMENT");
foreach(var doc in docs)
{
doc.XPathSelectElement("/DOCUMENTDATA/DOCUMENTFIELD/[@name='Producer Name']", nsm); //this line produces this exception: Expression must evaluate to a node-set.
}
私はあなたが注意されますようXmlNamespaceMangerオブジェクトを提供したが上記。私はそれが名前空間の部分を扱うと仮定しましたが、賢明にはそうではありません。しかし、あなたのバージョンでも、私のコンパイラは結果セットなどを返すような式を生成していない場合と同じ例外をスローします。 –
@MatthewCox、私は私の答えを更新しました。 –
Xパスに接頭辞を含めるとします。SelectNode( "kfx:SomeNodeName/kfx:SomeChildName"、SomeNameSpaceManager) –