gpt4 book ai didi

java - XSL 错误 : "Content is not allowed in prolog" - not sure what I got wrong this time

转载 作者:行者123 更新时间:2023-12-01 08:58:01 25 4
gpt4 key购买 nike

我有一个程序可以编写一些 XML 文件,如下所示:

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>&#x9;</xsl:text>
<xsl:value-of select="./@primary_id" />
<xsl:text>&#10;</xsl:text>
</xsl:template>
</xsl:stylesheet>

XML 文件很大,但看起来不错,这是其中的前几行:

<?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 加载它,我认为这会正确加载字符集,所以我不确定为什么转换失败。

最佳答案

实际的解决方案与 XML 文件无关。我使用的库有一个错误,因为返回的是目录路径而不是有效的 XML 文件。我试图删除这个问题,但因为它已经得到回答,所以我不能。我现在确实觉得很傻...

关于java - XSL 错误 : "Content is not allowed in prolog" - not sure what I got wrong this time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com