0

我有如下结构的 XML 数据。我正在尝试评估 Xid 值以查看停止是否是多个值,例如位置 1 或位置 2,但仅匹配它在结构中找到的第一个命中。然后我需要它输出该站点的日期值。

<ShipmentStop>
    <StopSequence>1</StopSequence>
        <LocationRef>
            <LocationGid>
                <Gid>
                    <Xid>LOCATION 1</Xid>
                </Gid>
            </LocationGid>
        <ArrivalTime>
            <EventTime>
                <EstimatedTime>
                    <Date>20181128070000</Date>
                </EstimatedTime>
            </EventTime>
        </ArrivalTime>
</ShipmentStop>
<ShipmentStop>
    <StopSequence>2</StopSequence>
        <LocationRef>
            <LocationGid>
                <Gid>
                    <Xid>LOCATION 2</Xid>
                </Gid>
            </LocationGid>
        <ArrivalTime>
            <EventTime>
                <EstimatedTime>
                    <Date>20181129070000</Date>
                </EstimatedTime>
            </EventTime>
        </ArrivalTime>
</ShipmentStop>

我正在尝试构建以下代码,但我遇到了一些问题。

<xsl:for-each select="ShipmentStop[/LocationRef/LocationGid/Gid/Xid='LOCATION 1' or /LocationRef/LocationGid/Gid/Xid='LOCATION 2'][1]">
    <ArrivalTime>
        <xsl:value-of select="ArrivalTime/EventTime/EstimatedTime/Date"/>                               
    </ArrivalTime>
</xsl:for-each> 
4

1 回答 1

0

我假设下面有一个格式良好的 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]

注意/in的使用/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]

因为LocationRefShipmentStop节点的孩子。

于 2019-03-01T07:09:35.323 回答