さらに別の XPath/XmlNamespaceManager の質問をするのは嫌いですが、これを理解できないようです。
XPath "//FuelGradeMovement" を使用してノードを正しく検出できる XpathVisualizer ツールを使用しました。名前空間を認識し、XPath をそのように評価しました。
ノード「 FuelGradeMovement 」が存在するかどうかのみを確認したい。簡単です。しかし、いいえ、うまくいきません。
明らかに、私が xpath しているノードにはプレフィックスさえありませんが、名前空間マネージャーを使用しないと、ドキュメント内の他のノードにプレフィックスがあるため、実行時エラーが発生します。
名前空間では、何らかの理由でノードが表示されません。
このドキュメントを解析しようとしています:
<?xml version="1.0"?>
<NAXML-MovementReport version="3.4" xmlns="http://www.naxml.org/POSBO/Vocabulary/2003-10-16" xmlns:radiant="http://www.radiantsystems.com/NAXML-Extension" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.naxml.org/POSBO/Vocabulary/2003-10-16 NAXML-PBI34RadiantExtended.xsd">
<TransmissionHeader>....
</TransmissionHeader>
<FuelGradeMovement/>
</NAXML-MovementReport>
このコードを使用して:
using ( var fs = file.OpenRead() )
{
var x = new XPathDocument( fs );
var nav = x.CreateNavigator();
var mgr = new XmlNamespaceManager( nav.NameTable );
mgr.AddNamespace( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
mgr.AddNamespace( "xmime", "http://www.w3.org/2005/05/xmlmime" );
mgr.AddNamespace( "radiant", "http://www.radiantsystems.com/NAXML-Extension" );
mgr.AddNamespace( "ns1", "http://www.naxml.org/POSBO/Vocabulary/2003-10-16" );
var iterator = nav.Select( "//FuelGradeMovement", mgr );
return iterator.Count > 0;
}
非常に多くの組み合わせを試しましたが、間違いは見当たりません。誰でも助けることができますか?
ありがとうございました!