Выражение для сравнения значения атрибута в camel Java DSL

#java #xpath #apache-camel

#java #xpath #apache-camel

Вопрос:

Я хотел бы написать выражение с XPath для сравнения значения атрибута в заголовке моего XML-сообщения с определенным значением, чтобы направить его в соответствующую папку. Заголовок XML

 ?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="cdarendercda.xsl"?>
    <Books xmlns="urn:hl7-org:v3"
        xmlns:classCode="DOCCLIN" xmlns:moodCode="EVN"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:hl7-org:v3 ./cda_r2_normativewebedition2010/infrastructure/cda/CDA.xsd">
        <realmCode code="DE" />
        <typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040" />
        <templateId root="2.16.840.1.113883.10.20.29" />
        <templateId root="2.16.840.1.113883.10.20.33" />
        <templateId root="2.16.840.1.113883.10.20.33.1.1" />
        <id extension="2015121415313522" />
        <code code="12.3.34.65" codeSystem="2.16.840.1.113883.6.1"
            codeSystemName="LOINC" displayName="Document" />
        <title>Prices</title>
        <effectiveTime value="201512141531 0000" />
        <confidentialityCode code="N" codeSystem="2.16.840.1.113883.5.25" />
        <languageCode code="de-DE" />
  

Я хотел бы сравнить определенный атрибут узла (код атрибута элемента code) со значением и направить его в папку, которая имеет значение true.

Я написал что-то вроде

 from("file:testxml/")
                .choice()
                .when()
//              .xpath("urn:hl7-org:v3:Books/urn:hl7-org:v3:code/@code = '12.3.34.65'")
                .xpath("urn:hl7-org:v3:ClinicalDocument/urn:hl7-org:v3:code[@code='12.3.34.65']")
                .to("file:xPath/")
                .to("direct:xpath");

            }
  

Я хочу проверить, является ли значение атрибута ‘12.3.34.65’. Не могли бы вы, пожалуйста, поправить меня и сообщить мне, как правильно написать выражение xpath.

Большое спасибо!

Ответ №1:

Ваш образец xml недопустим. Также код атрибута элемента code не является ‘12.3.34.65’. Попробуйте ниже перенаправить вывод в папку назначения.

 from("file:testxml")
 .choice()
  .when()
   .xpath("/Books/code[@code='x.x.x.x']")
   .to("file:destinationFolder");
  

Комментарии:

1. Вы правы насчет значения атрибута, но я ошибочно вставил абстрактное значение. Сейчас я это исправил. Я протестировал XML, используя значение ‘12.3.34.65’. Написанный вами код совпадает с написанным мной, но без пространства имен. Без ссылки на пространство имен выражение не будет работать.