2017-11-24 5 views
0

이 경우 XSLT 코드를 만들어야하지만 'Response'코드에 도달 한 후에는 실패합니다. 그리고 나는 원격 서비스에서 그것을 받고 있기 때문에 나는 그것을 바꿀 수 없다. 같은 제안을 해주세요. 내가 응답 받고있어 XML :하나의 XML 파일에 두 개의 <? xml version = "1.0"encoding = "UTF-8"?> 태그가 있고 xslt를 만들려고합니다. 어떻게 태그를 처리합니까?

<?xml version='1.0' encoding='utf-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
<Response><?xml version="1.0" encoding="UTF-8"?> 
<ResponseCode> 
0 
</ResponseCode> 
</Response> 
</soapenv:Body> 
</soapenv:Envelope> 
+1

XML 문서의 유효성은 2 진수입니다. 유효한 XML이거나 XML이 아닙니다. 파일의 시작 부분에는 하나의 XML 선언 만있을 수 있습니다. 그래서 당신의 예제는 XML *이 아닙니다. 일부 파서는이를 거부하지 않을 수도 있지만 파서가 아닌 XML의 경우를 처리하기위한 확장 일 수 있습니다. 원격 서비스에 연락하여 응답을 수정해야합니다. – Richard

+0

'Response' 엘리먼트에 표시된 것과 같이 이스케이프 처리되지 않은 다른 문서가 포함되어 있습니까? 일반적으로 내부 문서는 CDATA 섹션에서 이스케이프 처리됩니다. ' 0]]>'. 이 경우 XSLT 3을 가정하면'parse-xml'을 사용하여 내부 문서를 파싱 할 수 있습니다. –

답변

4

당신이 파일이 XML 선언이있는 경우 다음 파일을 XML하지 않고,이 XML이 아닌 경우 다음은 XSLT를 사용하여 처리 할 수 ​​없습니다.

비 XML 파일을 처리하려면 시작하기 전에 비 XML 기술을 사용하여 XML로 변환해야합니다. (그러나 가능한 경우 공급자에게 버그를 수정하도록 권유하는 것이 가장 좋습니다. 표준에 대한 요점은 실제로 규칙을 준수하면 모든 사람에게 비용이 절감된다는 것입니다.) 손상된 XML 파일을 복구해야하는 경우, 때때로 HTML Tidy 또는 validator.nu와 같은 유틸리티를 사용할 수도 있고, 사용자 정의 Perl 스크립트 또는 유사 도구가 필요할 수도 있습니다.

나중에

사실, 나는이 대답을 규정한다고 생각합니다. 파일에 일련의 올바른 형식의 XML 문서가 포함되어 있고 XML 문서로 시작하는 경우에는 unparsed-text() 함수를 사용하여 XSLT 3.0 스타일 시트에서 해당 파일을 읽고 xsl:analyze-string을 사용하여 해당 구성 문서로 분할하고, XPath 3.0 parse-xml() 함수를 사용하여 각 문서를 구문 분석 한 다음 정상적으로 문서를 처리하십시오. 미리 파일 인코딩을 알고 있는지 확인해야하며 주석이나 CDATA 섹션에 XML 선언으로 가면 뭔가있는 것처럼 "nasties"가 없다고 확신해야합니다.