が、私はこのようないくつかのXMLファイルを書き込むプログラムを持っている:XSLのERR:「コンテンツはプロローグで許可されていません」 - 私が間違って得たものかわからないこの時間
Path path = Paths.get(new URI("file://" + this.destination));
StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Responses>\n");
// Get a bunch of data from a remote web service
sb.append("</Responses>");
Files.write(path, sb.toString().getBytes(Charset.forName("UTF-8")), StandardOpenOption.CREATE);
ファイルを読み取るコードのように見えますこの:
import javax.xml.transform.stream.StreamSource;
// ...
// Load XSLT
Source source = new StreamSource(this.getClass().getClassLoader().getResourceAsStream("my_transform.xsl"));
Transformer transformer = factory.newTransformer(source);
// set parameter
transformer.setParameter("db", dbName);
// Get input file
Source xmlSource = new StreamSource(this.pathToFile.toFile());
// Execute transform
transformer.transform(xmlSource, outputTarget);
自体を変革が非常に簡単です:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no" encoding="utf-8"
media-type="text/plain" />
<xsl:strip-space elements="*" />
<xsl:param name="db" />
<xsl:template match="/ELEMENT1/ELEMENT2/ELEMENT3/data[@dbname=$db]">
<xsl:value-of select="../../@id" />
<xsl:text>	</xsl:text>
<xsl:value-of select="./@primary_id" />
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
XMLファイルが大きいですが、彼らはOKになり、ここにあります1の最初の数行:私のコード変換を実行しようとすると
<?xml version="1.0" encoding="utf-8"?>
<Responses>
<Response id="ID0000123">
<opt>
<data primary_id="ID0000123-01" version="0">
、それは例外をスロー:
ERROR: 'Content is not allowed in prolog.' ERROR: 'com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Content is not allowed in prolog.' javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Content is not allowed in prolog. at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:749) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:351) ...
私は、これはから来ている場所がわからないんだけど。これが私にとって最後に起こったのは文字セットの不一致でしたが、この場合はUTF-8としてファイルを書き、StreamSource
をロードして文字セットを正しくロードすると思っていました。変換は失敗しています。
エラーメッセージは異なりますが、原因と救済策はこの質問の答えにあるものと同じです:[**エラー:処理命令ターゲット "\ [xX \ ] \ [mM \] \ [1L \] "は許可されていません**](http://stackoverflow.com/questions/19889132/error-the-processing-instruction-target-matching-xxmmll-is-not-allowed ) – kjhughes
おそらく関連:http://stackoverflow.com/questions/4569123/content-is-not-allowed-in-prolog-saxparserexception –
[Error: "[xX \] \ [[ mM \] \ [1L \] "は許可されていません](http://stackoverflow.com/questions/19889132/error-the-processing-instruction-target-matching-xxmmll-is-not-allowed) –