VTD-XML: как получить XPath текущего элемента?

Я использую VTD для анализа и разделения очень больших файлов XML и требую фактического XPath текущего элемента, на который указывает курсор после вызова AutoPilot.evalXPath().

Рассмотрим следующий XML:

<atlas>
    <continents>
        <continent>
            <name>North America</name>
            <countries>
                <country>
                    <name>Canada</name>
                </country>
                <country>
                    <name>US</name>
                </country>
            </countries>
        </continent>
        <continent>
            <name>South America</name>
            <countries>
                <country>
                    <name>Chile</name>
                </country>
                <country>
                    <name>Brazil</name>
                </country>
            </countries>
        </continent>
    </continents>
</atlas>

Я инициализирую AutoPilot с помощью autopilot.selectXPath("/atlas/continents/continent/countries/country");

Когда я перебираю совпадения, используя autopilot.evalXPath(), мне нужен абсолютный XPath каждого элемента, например, как /atlast/continents/continent[1]/countries/country[2].

Перепробовал почти все способы в VTDNav и AutoPilot-

  • VTDNav.getXPathStringVal() / VTDNav.getXPathStringVal(short mode)
  • VTDNav.toNormalizedXPathString(int j)
  • AutoPilot.getExprString()

Есть идеи?


person lea    schedule 01.08.2015    source источник


Ответы (1)


Я не думаю, что vtd предлагает функцию в текущей версии, на самом деле я не знаю ни одного API, который предлагает это. Я думаю, причина в том, что существует много разных возможных XPath для любого текущего узла элемента... что вы думаете?

person vtd-xml-author    schedule 04.08.2015
comment
Спасибо за ваш ответ @vtd-xml-author. Да, есть много разных XPath для доступа к узлу. И эта возможность, похоже, не существует и в других парсерах, таких как JDOM. Не уверен, что я что-то упускаю здесь, но разве у каждого узла нет своего уникального абсолютного XPath? В моем примере выше Canada можно получить, используя несколько XPath, но абсолютный XPath /atlast/continents/continent[0]/countries/country[0] уникален для Canada. Кажется достаточно простым, но я уверен, что под капотом парсера происходит гораздо больше, чем я могу себе представить :) - person lea; 04.08.2015
comment
как насчет /atlast/континенты/континент[0]/страны/страна[0]/../страна[0]? - person vtd-xml-author; 12.08.2015