0

次の XML があります (XmlDocument に格納されています)。

<root>
  <row>
    <elem>Timestamp</elem>
    <elem>ERB.CHW.BTU_CV</elem>
    <elem>ERB.CHW.BTU1_CV</elem>
    <elem>ERB.HW.BTU_CV</elem>
    <elem>ERB.HW.BTU1_CV</elem>
    <elem>ERB.KW.DEMAND_CV</elem>
    <elem>ERB.KWH.MT_CV</elem>
    <elem></elem>
  </row>
  <row>
    <elem>2011/09/30 11:21:13.9062</elem>
    <elem>2.307609E+09</elem>
    <elem>1880067</elem>
    <elem>1.068635E+08</elem>
    <elem>1340.386</elem>
    <elem>448.8</elem>
    <elem>1427723</elem>
    <elem></elem>
  </row>
</root>

私はこのクエリで作業しています:

Dim results As XmlNodeSet = myDoc.xql("/*/row[1]/elem[normalize-space()]")

...これは、私が期待する XmlNodeSet を返します。

<elem>Timestamp</elem>
<elem>ERB.CHW.BTU_CV</elem>
<elem>ERB.CHW.BTU1_CV</elem>
<elem>ERB.HW.BTU_CV</elem>
<elem>ERB.HW.BTU1_CV</elem>
<elem>ERB.KW.DEMAND_CV</elem>
<elem>ERB.KWH.MT_CV</elem>

ただし、ソース XML のどこでこの XmlNodeSet が発生するかを知りたいです(開始点と長さ (両方の整数) を取る強調表示関数を使用して、元のドキュメントでこれらの結果を強調表示できるようにするため)。

私が知る限り、結果の NodeSet を元の XmlDocument と比較する (そして、ソース ドキュメント内のこれらの要素の位置を何らかの方法で取得する) 明らかな方法はありません。私はいくつかのアイデアを試しましたが、これまでのところ、次の恐ろしいプロセスしか思い浮かびません。

  1. オリジナルの XPath を使用してソース ドキュメントに対して XSLT を実行し、元のソース ドキュメントに不要なマークアップを追加します (例: <elem highlight="true">ERB.KWH.MT_CV</elem>)。
  2. RS 内で正規表現を使用して、このマークアップを含む要素の位置を把握します。
  3. (a) マークアップが削除され、(b) それらの位置のテキストが強調表示されたドキュメントのバージョンを出力します。

うん。誰かがより良い方法を考えることができますか?

4

1 に答える 1