XSL Соответствует первому вхождению значений в дочернем узле, затем извлекает значение из одноуровневого узла

Вы можете сделать это, как этот пример, если я хочу только один раз поймать букву минус a в строке, и ее можно проверить с помощью myRegex.IsMatch ()

^ [^ e] [е] {1} [^ е] $

0
задан EnnZed 1 March 2019 в 01:42
поделиться

1 ответ

Я предполагаю, что правильно сформированный XML ниже. Я добавил корневой узел с именем root:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <ShipmentStop>
        <StopSequence>1</StopSequence>
        <LocationRef>
            <LocationGid>
                <Gid>
                    <Xid>LOCATION 1</Xid>
                </Gid>
            </LocationGid>
        </LocationRef>
        <ArrivalTime>
            <EventTime>
                <EstimatedTime>
                    <Date>20181128070000</Date>
                </EstimatedTime>
            </EventTime>
        </ArrivalTime>
    </ShipmentStop>
    <ShipmentStop>
        <StopSequence>2</StopSequence>
        <LocationRef>
            <LocationGid>
                <Gid>
                    <Xid>LOCATION 2</Xid>
                </Gid>
            </LocationGid>
        </LocationRef>
        <ArrivalTime>
            <EventTime>
                <EstimatedTime>
                    <Date>20181129070000</Date>
                </EstimatedTime>
            </EventTime>
        </ArrivalTime>
    </ShipmentStop>    
</root>

В вашем исходном xpath вы использовали

ShipmentStop[/LocationRef/LocationGid/Gid/Xid='LOCATION 1' 
    or /LocationRef/LocationGid/Gid/Xid='LOCATION 2'][1]

Обратите внимание на использование / в /LocationRef. Когда вы делаете это, вы ищете из корневого узла вашего XML, таким образом, он потерпит неудачу. Чтобы использовать узел контекста, просто добавьте точку перед косой чертой, например,

ShipmentStop[./LocationRef/LocationGid/Gid/Xid='LOCATION 1' 
    or ./LocationRef/LocationGid/Gid/Xid='LOCATION 2'][1]

, или вы можете удалить ./ в xpath. Например:

ShipmentStop[LocationRef/LocationGid/Gid/Xid='LOCATION 1' 
    or LocationRef/LocationGid/Gid/Xid='LOCATION 2'][1]

, поскольку LocationRef является дочерним узлом узла ShipmentStop.

0
ответ дан Joel M. Lamsen 1 March 2019 в 01:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: