如何找出什么是;“数字”;我指定的xml元素的名称

如何找出什么是;“数字”;我指定的xml元素的名称,xml,vim,xpath,Xml,Vim,Xpath,假设我有这样的xml结构 <root> <element>some content</element> <element>some content 2</element> <element>some content 3</element> <element>some content 4</element> <element>some co

假设我有这样的xml结构

<root>
    <element>some content</element>
    <element>some content 2</element>
    <element>some content 3</element>
    <element>some content 4</element>
    <element>some content 5</element>
    <element>some content 6</element>
    <element>some content 7</element>
    <element>some content 8</element>
    <element>some content 9</element>
    <element>some content 10</element>
</root>

一些内容
部分内容2
部分内容3
部分内容4
部分内容5
一些内容6
部分内容7
一些内容8
一些内容9
一些内容10
我在根目录中有很多标签,比如1000个,每个标签都包含不同的数据当然(不是唯一的),我的问题是。。。找出元素编号的最快方法是什么,例如,如果我使用元素“some content 8”,我想得到编号8,我知道xpath可能是正确的工具,但在我看来非常慢(我想在几秒钟内完成,因为我经常使用它)

也许是一些“vim”的方法如何做到这一点


谢谢

要从当前行中提取号码,可以在vim中使用以下ex命令:

:echo substitute(getline('.'), '.*\(\d\+\).*', '\1', '')

您可以计算从第一行到当前行发生的
替换的所有时间:

:0,.s/<element>//gn
:0.s///gn
请注意,
n
标志可防止替换实际发生


这显然不适用于所有可能的XML类型,但可能适合您的数据。

纯XPath解决方案

count(/*/element[. = 'some content 8']/preceding-sibling::*) +1
<root>
    <element>some content</element>
    <element>some content 2</element>
    <element>some content 3</element>
    <element>some content 4</element>
    <element>some content 5</element>
    <element>some content 6</element>
    <element>some content 7</element>
    <element>some content 8</element>
    <element>some content 9</element>
    <element>some content 10</element>
</root>
8
要轻松验证这一点,您可以使用类似于的工具或以下基于XSLT的验证:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
     <xsl:value-of select=
     "count(/*/element[. = 'some content 8']/preceding-sibling::*) +1"/>
 </xsl:template>
</xsl:stylesheet>

问题是elemens的文本不包含数字,这只是为了演示,我很抱歉混淆了Precies wat ik wilde zeggen(我将要说的)或更好,
:??,.s///gn
(如果在
之上还有另一组
的话。好问题,+1。是的,这很容易用XPath实现。