Как узнать, что такое «число» указанного мной элемента xml - PullRequest
1 голос
/ 13 сентября 2011

Допустим, у меня есть 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>

У меня есть много тегов в корне, скажем, 1000, и каждый из них, конечно, содержит разные данные (не уникальные), моя проблема заключается в том ... какой самый быстрый способ узнать номер элемента Например, если я работаю с элементом «некоторый контент 8», я хочу получить номер 8, я знаю, что xpath, вероятно, является подходящим инструментом для этого, но он кажется мне очень медленным (я хочу сделать это, как в течение нескольких секунд, потому что Пользуюсь очень часто)

Может быть какой-нибудь "vim" способ как это сделать?

Спасибо

Ответы [ 3 ]

2 голосов
/ 13 сентября 2011

Вы можете посчитать, сколько раз замена <element> произойдет с первой до текущей строки:

:0,.s/<element>//gn

Обратите внимание, что флаг n предотвращает фактическое замещение.

Это, очевидно, не будет работать для всех мыслимых типов XML, но может соответствовать вашим данным.

0 голосов
/ 14 сентября 2011

Чистый раствор XPath :

count(/*/element[. = 'some content 8']/preceding-sibling::*) +1

Чтобы легко это проверить, вы можете использовать такой инструмент, как XPath Visualizer или следующую проверку на основе 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>

Когда это преобразование выполняется для предоставленного 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>

результат вычисления выражения XPath выводится, и он правильный :

8
0 голосов
/ 13 сентября 2011

Чтобы извлечь номер из текущей строки, вы можете использовать следующую команду ex в vim:

:echo substitute(getline('.'), '.*\(\d\+\).*', '\1', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...