Real Studio:在原始XmlDocument中找到XQL结果的位置

时间:2012-03-11 06:25:55

标签: xml xquery realbasic realstudio

我有以下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中 where 这个XmlNodeSet出现了(这样我就可以使用一个突出显示函数 - 它取一个起点和一个长度,两个整数 - 来在原始文档中突出显示这些结果。)

据我所知,没有明显的方法可以将我的结果NodeSet与原始的XmlDocument进行比较(并以某种方式获取该源文档中这些元素的位置)。我已经尝试了一些想法,到目前为止,我唯一能想到的是以下可怕的过程:

  1. 使用原始XPath对源文档运行XSLT - 将无关标记放在原始源文档中(例如,<elem highlight="true">ERB.KWH.MT_CV</elem>)。
  2. 使用RS中的正则表达式来计算出的定位 包含此标记的元素。
  3. 输出(a)删除了标记的文档版本 (b)强调这些职位的案文。
  4. 呸。谁能想到更好的方法?

1 个答案:

答案 0 :(得分:0)

  

请参阅XPath Visualizer的源代码 - 您可以在以下位置下载:

http://www.huttar.net/dimitre/XPV/TopXML-XPV.html

相关代码位于XSLT样式表中。

<强>参考