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>

但是,我想知道这个XmlNodeSet在源 XML 中的哪个位置出现(这样我就可以使用一个突出显示函数——它采用一个起点和一个长度,都是整数——在原始文档中突出显示这些结果)。

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

  1. 对源文档运行 XSLT——使用我原来的 XPath——在原始源文档中放置无关的标记(例如,<elem highlight="true">ERB.KWH.MT_CV</elem>)。
  2. 在 RS 中使用正则表达式来确定包含此标记的元素的位置。
  3. 输出文档的一个版本,该版本 (a) 已删除标记并 (b) 突出显示这些位置的文本。

呸。谁能想到更好的方法?

4

1 回答 1

0

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

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

相关代码在 XSLT 样式表中。

参考

于 2014-06-25T06:03:16.543 回答