如何找出什么是;“数字”;我指定的xml元素的名称
假设我有这样的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
<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实现。