親/祖父母の兄弟の子供から引き出された他の値に基づいて属性値を見つける必要があります。2通りの表現ができると思います。
したがって、次の XML (数千行になる可能性のあるログ ファイルから派生したもの) が与えられます。
<p:log xmlns:p="urn:NamespaceInfo">
<p:entries>
<p:entry timestamp="2012-12-31T09:39:25">
<p:attributes>
<p:attrib name="Position" value="1B2" />
<p:attrib name="Something" value="Something_else" />
</p:attributes>
<p:msg>
</p:msg>
</p:entry>
<p:entry timestamp="2012-12-31T09:39:25">
<p:attributes>
<p:attrib name="Form" value="FormA" />
</p:attributes>
<p:msg>
</p:msg>
</p:entry>
<p:entry timestamp="2012-12-31T09:39:25">
<p:msg>Successful....</p:msg>
</p:entry>
<p:entry timestamp="2012-12-31T12:12:12">
<p:attributes>
<p:attrib name="Position" value="1B3" />
<p:attrib name="Something" value="Something_else" />
</p:attributes>
<p:msg>
</p:msg>
</p:entry>
<p:entry timestamp="2012-12-31T09:39:25">
<p:attributes>
<p:attrib name="Form" value="FormB" />
</p:attributes>
<p:msg>
</p:msg>
</p:entry>
<p:entry timestamp="2012-12-31T09:39:25">
<p:msg>Processing....</p:msg>
</p:entry>
<p:entry timestamp="2012-12-31T09:39:25">
<p:msg>Error1</p:msg>
</p:entry>
<p:entry timestamp="2012-12-31T09:39:25">
<p:msg>Error1</p:msg>
</p:entry>
</p:entries>
...
</p:log>
- (
<p:attributes>親タグは複数の<p:attrib>子タグを持つことができます) - (
<p:event>タグには 1 つのタグのみを含めることができます<p:msg>)
valueまず、対応するname属性がの属性の値を取得する必要がありますが、これはPosition、祖父母の兄弟がのテキストをp:entry持つ子を持っている場合に限られます。また、そのセクション内にとどまる必要があります。たとえば、技術的には と が両方の祖父母の兄弟であっても、新しい/ ペアが の前に現れるため、ペアの最初の出現は必要ありません。p:msgError1Position'/'ValuePositionValueError1p:msgError1
次に、取得した子の親のタイムスタンプ属性の値が必要PositionですValue。したがって、位置を見つけてから、祖父母p:entryタグのタイムスタンプ属性値を見つけます。
したがって、この例では、次の値のみを取得できるはずです。
1B3
2012-12-31T12:12:12 (指定された日付/時刻スタンプは任意の値です。これは異なるため、私が参照していたものがわかります)。
ちょっと混乱します。また、データベースからデータを取得するために XQuery を使用しており、各式が特異値になる必要があるため、1 つのインスタンスのみを取得する必要があります。
p:msgwithに関連付けられた最初のタイムスタンプを取得するにはError1、次のようにします。 //p:entry[descendant::p:msg='Error1.'][1]/@timestamp
しかし、他の値を取得するためにツリーに戻ることはできないようです。
p:attrib 孫を持つ p:events のすべてのタイムスタンプを取得できます。//p:entry[descendant::p:attrib[@name=''Position'']]/@timestamp)[1]
しかし、「Error1」が続くものだけに限定することはできないようです。位置に基づいて選択することはできません。最初にコンテンツに基づいて作成する必要があります。
ボーナス質問
ログファイルの次のインスタンスでこれをもう一度行うにはどうすればよいですか? (2 番目のメッセージだけでなく、次の「親/兄弟」の一致に対してError1メッセージが表示されるログ ファイルを次にダウンします)。Error1上記の質問に対する答えが得られれば、これは明らかかもしれません。