0

我正在尝试使用过滤器构建一个 xpath 总和表达式,该过滤器将为过滤的时间范围和单位提供一些秒数。我认为这相当简单,但似乎无法掌握它。

假设我有一个 XML 文档,例如:

<root>
    <hourly>
        <hour>
            <unit>1</unit>
            <timestamp>2015-05-02 00:00:00-0500</timestamp>
            <operationaltime>3600</operationaltime>
        </hour>
        <hour>
            <unit>1</unit>
            <timestamp>2015-05-02 01:00:00-0500</timestamp>
            <operationaltime>3113</operationaltime>
        </hour>
        <hour>
            <unit>2</unit>
            <timestamp>2015-05-02 00:00:00-0500</timestamp>
            <operationaltime>1809</operationaltime>
        </hour>
        <hour>
            <unit>2</unit>
            <timestamp>2015-05-02 01:00:00-0500</timestamp>
            <operationaltime>3444</operationaltime>
        </hour>
    </hourly>
</root>

这是我所拥有的:

sum(hourly/hour[/unit=2 and /timestamp='2015-05-02 01:00:00-0500']/operationaltime)
4

1 回答 1

4

当您希望它们是相对的时,不要使用绝对路径。也就是说,当你说 时/unit=2,它会回到上下文项的根;如果您希望它与小时相关,请使用其中之一./unit=2或仅unit=2. 因此:

declare context item := <root>
    <hourly>
        <hour>
            <unit>1</unit>
            <timestamp>2015-05-02 00:00:00-0500</timestamp>
            <operationaltime>3600</operationaltime>
        </hour>
        <hour>
            <unit>1</unit>
            <timestamp>2015-05-02 01:00:00-0500</timestamp>
            <operationaltime>3113</operationaltime>
        </hour>
        <hour>
            <unit>2</unit>
            <timestamp>2015-05-02 00:00:00-0500</timestamp>
            <operationaltime>1809</operationaltime>
        </hour>
        <hour>
            <unit>2</unit>
            <timestamp>2015-05-02 01:00:00-0500</timestamp>
            <operationaltime>3444</operationaltime>
        </hour>
    </hourly>
</root>;

sum(hourly/hour[unit=2 and timestamp='2015-05-02 01:00:00-0500']/operationaltime)

...产生 的结果3444,这在我看来是正确的。

于 2015-05-11T20:55:18.207 回答