Выбор узлов в зависимости от критерия узла-брата с использованием XSLT - PullRequest
2 голосов
/ 24 июня 2010

Предположим, у меня есть такой XML:

<child_metadata>
    <metadata>
        <attributes>
                <metadata_key value="include"/>
                <metadata_value value="value1"/>
        </attributes>
    </metadata>
    <metadata>
        <attributes>
                <metadata_key value="dont_include"/>
                <metadata_value value="value2"/>
        </attributes>
    </metadata>
    <metadata>
        <attributes>
                <metadata_key value="include"/>
                <metadata_value value="value3"/>
        </attributes>
    </metadata>
</child_metadata>

Используя XSLT (без каких-либо расширений), я хочу выбрать только те значения, для которых ключ метаданных «include». Итак, для этого примера я хочу выбрать value1 и value3.

Как мне это сделать?

Ответы [ 4 ]

2 голосов
/ 24 июня 2010

Для набора узлов metadata_value используйте

//metadata/attributes[metadata_key/@value='include']/metadata_value

добавьте @value, чтобы получить сами значения.

2 голосов
/ 24 июня 2010

Используемое выражение XPath (для шаблона или для каждого цикла) будет:

//metadata_value[../metadata_key/@value='include']/@value

Так как неясно, что вы подразумеваете под "select", я не могу опубликовать полный образец XSLT. XSLT для преобразования, а не для запроса («выборка» данных); запрос выполняется с помощью выражений XPath, таких как приведенное выше.

0 голосов
/ 24 июня 2010

Использование :

/child_metadata/metadata/attributes[metadata_key/@value='include']/metadata_value/@value

Использование аббревиатуры // часто имеет низкую эффективность, поскольку это приводит к обходу всего (под) дерева.

0 голосов
/ 24 июня 2010

Я думаю, что вы хотите

//atributes[metadata_key/@value='include']/metadata_vale/@value

или (как сообщение Лусеро)

//metadata_value[../metadata_key/@value='include']/@value

Но, в зависимости от того, что вы хотите сделать, вы должны использовать ключи, потому что здесь есть перекрестная ссылка (metadata_key/@value используется как ключ к metadata_value/@value). Также хорошо избегать нисходящей оси.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...