Я работаю с очень общей структурой XML, где все является элементом (ну, в любом случае, все, что относится к этому вопросу).
Основываясь на знании элемента item, на котором я сейчас нахожусь, и элемента item, который является родителем искомого узла, мне нужно найти элемент. У меня есть рабочий xpath, но он довольно ресурсоемкий, и я ищу что-то более элегантное и более дешевое.
Ключ элемента = узел является родителем элемента, который я ищу (хотя на самом деле он не является дочерним для корня документа)
XML:
<root>
<item key="a">
<item key="b">
<item key="c">
<item key="d"/>
</item>
</item>
<item key="e">
<item key="f">
<item key="g"/>
</item>
</item>
</item>
</root>
Фактический XML намного глубже и с гораздо большим количеством ветвлений.
Так, например, если я нахожусь с элементом с ключом = g, e или f, мне нужно вернуть элемент с ключом = e. Если я нахожусь на предмете с ключом b, c или d, мне нужно вернуть предмет с ключом = b.
Я использую этот путь xpath, который работает, но движение вверх и затем назад вниз по оси предок-потомок кажется гораздо более длительным, чем мне нужно.
current()
/ancestor-or-self::item[@key='a']
/item[descendant-or-self::* = current()]
Есть ли более простой способ сделать это, имея в виду, что я знаю только 1) узел, на котором я нахожусь, и 2) ключевой атрибут родителя искомого узла?
Просто ради подробностей: XML генерируется Sitecore, на самом деле я не использую функцию current (), я использую параметр sc_currentitem, чтобы установить начальный узел, с которого нужно начать обработку.
Заранее спасибо.