죄송 합니다만 여기 실수하는 것을 보지 못했을 것입니다. XML을 반환하는 낙타 경로가있어서 SpringRunner와 함께 실행되는 JUnit Test를 작성하여 출력을 테스트 할 수 있습니다. XSD에 대해 유효성을 검사하는 교환기에서 XML 스트림을 가져옵니다. 이것은 출력 XML이 유효하지 않기 때문에 XSD가 예외를 throw하기 때문에 훌륭하지만 다음 xquery가 비어있는 NAMESPACE로 요소를 생성하는 이유를 이해할 수 없습니까?xquery 변형은 요소에 빈 네임 스페이스를 만듭니다.
:이 코드를 사용하여 결과 XML은 다음 네임 스페이스 정의와 DATAGROUP 요소를 포함,declare default element namespace "http://www.dppgroup.com/XXXPMS";
let $cmmdoc := $doc/*:cmmdoc
, $partner := $doc/*:cmmdoc/*:information/*:partner_gruppe/*:partner
, $sequence:= fn:substring($cmmdoc/@unifier,3)
return <ClientMMS xmlns:infra="http://www.dppgroup.com/InfraNS">
{
for $x in $partner
where $x[@partnerStatusCode = " "]
return
element {"DataGroup" } {
<Client sequenceNumber="{$sequence}" />
}
}
내 문제는 다음과 같습니다 XQuery에 조각을 (내가 더 많은 코드를 제공 할 수 없습니다 다시 미안 해요) 참조
<?xml version="1.0" encoding="UTF-8"?>
<ClientMMS xmlns="http://www.dppgroup.com/XXXPMS"
xmlns:infra="http://www.dppgroup.com/InfraNS">
<DataGroup xmlns="">
<Client sequenceNumber="170908065609671475"/>
</DataGroup>
</ClientMMS>
단위 테스트에서 조각을 : 나는 왜 일 이유를 찾을 수없는 XQuery를 소개/튜토리얼/설명에서 jdk1.8_102
String xml = TestDataReader.readXML("/input/info/info_in.xml", PROJECT_ENCODING);
quelle.sendBody(xml);
boolean valid = false;
try {
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream((byte[]) archiv.getExchanges().get(1).getIn().getBody());
Document document = documentBuilder.parse(byteArrayInputStream);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(document);
transformer.transform(source, result);
String xmlString = result.getWriter().toString();
System.out.println(xmlString);
을 사용하고 있습니다 일어난다. 여러분은 DataGroup 요소가 기본 네임 스페이스에없는 이유를 설명해 주시겠습니까?
최소, 자체 포함, 실행 가능한 예제로 XQuery를 축소하고 Saxon 또는 Altova에서 실행하려고하면 결과에 네임 스페이스의 언명 인'xmlns = ""'이 없습니다. 그렇다면 어떤 XQuery 구현을 사용합니까? 또한 Java 코드가 어떻게 관련되어 있는지 잘 모르겠지만 일반적으로 네임 스페이스를 인식하지 못하는 기본 네임 스페이스 대신 네임 스페이스 인식 형 문서 작성기를 사용해야하므로 팩토리를 만들기 전에 setNamespaceAware (true)를 설정해야합니다. DocumentBuilder. –
안녕, 너 락! #setNamespaceAware (true)가 누락되었습니다. 그래서 Oxygen XML Developer에서 문제가 발생하지 않았지만 JAVA 코드를 사용했을 때만 javacode를 추가 한 것입니다. 하지만 그 차이가 있는지 없는지 확실하지 않았기 때문에 언급하지 않았습니다 :-). 당신이 내가 당신에게 upvote받을 자격이 있고 해결책으로 의견을 표시하기를 원한다면 대답을 만들어주십시오. 고마워요! –