Xpath для поиска корня XML с помощью Spring DSL - PullRequest
0 голосов
/ 24 августа 2018

Я использую Spring DSL для доступа к веб-серверу, как это,

<route>
    <!-- 1 -->
    <from uri="...">
    <!-- 2 -->
    <to uri="...">
    <!-- 3 -->
    <choice>
        <when>
            <xpath></xpath>
            <to uri="...">
        </when>
        <when>
            <xpath></xpath>
            <to uri="...">
        </when>
    </choice>
</route>

<!-- 1 --> при достижении конечной точки, <!-- 2 --> отправка запроса на веб-сервер, <!-- 3 --> проверка корневого элемента, полученного в качестве ответа от веб-сервера, на основе этого ответа XML отправит другой конечной точке

Веб-сервер вернет одно из двух сообщений XML, например,

<tns:roottag xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xmlns:tns="http://example.com">
    <tns:leaftag>
        information
    </tns:leaftag>
</tns:roottag>

или

<tns:Parenttag xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xmlns:tns="http://example.com">
    <tns:Childtag>
        information
    </tns:Childtag>
</tns:parenttag>

после получения XML с веб-сервера необходимо проверить корень на основе того, что с этим полученным XML будет выполняться другая операция,

Обратившись на какой-то сайт, я узнал, что для условия можно использовать XPath весной DSL,

Мой вопрос: 1. Извлекайте только имя корневого тега из XML-ответа (как показано ниже) и проверяйте с помощью XPath, основываясь на том, что выполняют другую операцию с исходным XML-ответом

.

tns:Parenttag xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xmlns:tns="http://example.com" ==> Parenttag

или

tns:roottag xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xmlns:tns="http://example.com" ==> roottag

1 Ответ

0 голосов
/ 24 августа 2018

Это будет совпадать, только если элементом верхнего уровня является <tns:roottag>:

<xpath>/tns:roottag</xpath>

, и это будет совпадать, только если элементом верхнего уровня будет <tns:Parenttag>:

<xpath>/tns:Parenttag</xpath>

Однако, прежде чем это сработает, вам нужно объявить префикс tns.Это можно сделать в верхнем элементе <beans>:

<beans
    xmlns="http://www.springframework.org/schema/beans"
    ...other namespace declarations...
    xmlns:tns="http://example.com"
>

Убедитесь, что URI пространства имен совпадает с URI в ответах XML.

...