Регулярное выражение XSLT 1.0 для цикла for - PullRequest
2 голосов
/ 30 сентября 2011

Итак, у меня есть xml как

<depot id="D7">
    <address> 
        <number>6000</number> 
        <street>Yonge</street> 
        <city>Toronto</city> 
        <province>ON</province> 
        <postal_code>M2M 2E4</postal_code> 
    </address> 
</depot> 

У меня есть сотни депо в XML

Теперь в моем xsl я определил переменную под названием «locale», в которой хранится почтовый код, например «M1C». После этого я хочу выбрать только те депо, где postal_code похож на 'locale'. Другими словами, если я укажу locale как «M1C», то я должен получить все хранилище, почтовый код которого содержит «M1C», поэтому в хранилище должны быть все «M1C A18», «M1C B2C» и т. Д.

В настоящее время у меня есть строка ниже

< xsl:for-each select="depot[address[postal_code=$locale]]">

, который дает мне только хранилище с точным соответствием почтового индекса, а не с "M1C A18", "M1C B2C" и т. Д. Я хочу использовать что-то вроде

<xsl:for-each select="depot[address[postal_code=*$locale*]]">

с подстановочными знаками, но это не работает. Предложения?

Ответы [ 2 ]

1 голос
/ 01 октября 2011

Используйте это:

<xsl:for-each select="depot[contains(address/postal_code,$locale)]" />

для соответствия только depot элементов, которые содержат фрагмент, определенный в $locale.

1 голос
/ 30 сентября 2011

Используйте

depot[starts-with(address/postal_code, $locale)]

Здесь мы предполагаем, что любой depot имеет единственный потомок address/postal_code и что никакое возможное значение $locale не является префиксом любого другого возможного значения $locale.

Если, например, второе предположение неверно, используйте :

depot[starts-with(address/postal_code, concat($locale, ' '))]

Реальные возможности регулярных выражений доступны в XPath 2.0 (например, функция matches()), но они не нужны для такой простой задачи, как эта.

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