1

以下の XML では、SelectSingleNodeofを使用XmlDocumentして結果の値を引き出しています。

evtASxml.SelectSingleNode(@"//@value").Value

最初の「値」の値を返します。

evtASxml.SelectSingleNode(@"//Result/@value").Value

null 例外を発生させます。

誰かが何が起こっているのか説明できますか?

 <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
 <System>
  <Provider Name="Microsoft-Windows-CAPI2" Guid="{f00f00-f00-f00f00-f00-f00f00f00}" /> 
  <EventID>30</EventID> 
  <Version>0</Version> 
  <Level>2</Level> 
  <Task>30</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x4000000000000001</Keywords> 
  <TimeCreated SystemTime="2012-04-08T23:43:37.573242200Z" /> 
  <EventRecordID>4828</EventRecordID> 
  <Correlation ActivityID="{f00f00-f00-f00-f00-f00f00f00f00}" /> 
  <Execution ProcessID="7512" ThreadID="3220" /> 
  <Channel>Microsoft-Windows-CAPI2/Operational</Channel> 
  <Computer>Matt-Seven</Computer> 
  <Security UserID="S-f00-f00-f00-f00f00f00-f00f00f00-f00f00f00-f00f00" /> 
  </System>
 <UserData>
 <CertVerifyCertificateChainPolicy>
  <Policy type="CERT_CHAIN_POLICY_SSL" constant="4" /> 
  <Certificate fileRef="f00f00f00f00f00f00f00f00f00f00f00.cer" subjectName="www.example.com" /> 
  <CertificateChain chainRef="{f00f00-f00-f00-f00-f00f00f00f00}" /> 
  <Flags value="0" /> 
 <SSLAdditionalPolicyInfo authType="server" serverName="example.com">
  <IgnoreFlags value="0" /> 
  </SSLAdditionalPolicyInfo>
  <Status chainIndex="0" elementIndex="0" /> 
  <EventAuxInfo ProcessName="iexplore.exe" /> 
  <CorrelationAuxInfo TaskId="{f00f00-f00-f00-f00-f00f00f00f00}" SeqNumber="4" /> 
  <Result value="800B010F">The certificate's CN name does not match the passed value.</Result> 
  </CertVerifyCertificateChainPolicy>
  </UserData>
  </Event>

イベント ログの数値が f00 に置き換えられました。

4

2 に答える 2

1

推測ですが、あなたは を望んでいると思いますが、そう//*[@value]ではありません//@value

ここに画像の説明を入力

于 2012-04-09T00:51:48.273 に答える
0

この問題の原因は、XML ドキュメントがデフォルトの名前空間にあることです

要素がデフォルトの名前空間にあるときに名前で要素を選択することは、XPath で最もよくある質問です。

Xpath は、接頭辞のない要素名を「名前空間なし」に属するものとして扱います。あなたの場合Result、「名前空間なし」(すべての要素は「http://schemas.microsoft.com/win/2004/08/events/event」名前空間にあります)にある要素は存在しないため、ノードは選択されません。

C# では、XmlNamespaceManager を 2 番目の引数として指定することをお勧めしますSelectSingleNode()--適切なオーバーロードを使用してください。

使用する:

evtASxml.SelectSingleNode(@"//x:Result/@value", yourXmlNamespaceManager).Value 

メソッドを使用して"x"、「http://schemas.microsoft.com/win/2004/08/events/event」名前空間への関連付けが追加されました。yourXmlNamespaceManagerAddNamespace()

于 2012-04-09T13:12:38.503 に答える