2017-11-24 5 views
0

これに対してXSLTコードを作成する必要がありますが、「応答」コードに達した後に失敗します。私はリモートサービスからそれを受け取っているので、私はそれを変更することはできません。同じことについていくつか提案してください。私は応答して受信してい XML:1つのxmlファイルに2つの<?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文書の有効性はバイナリです。有効なXMLであるか、XMLではありません。ファイルの先頭には、1つのXML宣言だけを置くことができます。だからあなたの例はXML *ではない。一部のパーサーはそれを拒否しないかもしれませんが、それはそのパーサーがnot-XMLのいくつかのケースを処理する拡張機能になります。リモートサービスに連絡して、応答を修正する必要があります。 – Richard

+0

'Response'要素に、表示されているようにエスケープされていない他の文書が含まれていますか?通常、内部文書はCDATAセクションでエスケープされます。 '<![CDATA [<?xml version = "1.0" encoding = "UTF-8"?> 0]]> 'その場合、XSLT 3を仮定すると、 'parse-xml'を使って内部文書を解析することができます。 –

答えて

4

ファイルで2つのXML宣言を持っている場合は、あなたのファイルはXMLではありません、それがXMLでない場合、それは、XSLTを使用して処理することはできません。

非XMLファイルを処理する場合は、非XMLテクノロジを使用して開始する前にXMLに変換する必要があります。 (ただし、できるだけ多くの場合、バグを修正するようにサプライヤを説得することをお勧めします。標準についての全体的なポイントは、実際にルールに従えば誰でもコストを節約できる点です)。破損したXMLファイルを修復する必要がある場合、 HTML Tidyやvalidator.nuなどのユーティリティを使用することがあります。カスタムPerlスクリプトなどが必要な場合もあります。

LATER

は実は、私はこの答えを修飾するべきだと思います。ファイルに一連の整形式XML文書が含まれていて、それぞれがXML宣言で始まっていることがわかっている場合は、unparsed-text()関数を使用してXSLT 3.0スタイルシートで読み取って、xsl:analyze-stringを使用して構成文書に分割し、 XPath 3.0 parse-xml()関数を使用してこれらの各ドキュメントを解析し、通常通りドキュメントを処理します。あらかじめファイルのエンコーディングを知っていることを確認しなければなりません。コメントやCDATAセクション内のXML宣言に偽ったような "nasties"はありません。

関連する問題