当前位置: 首页 > 知识库问答 >
问题:

解析XML时出错:prolog中不允许内容

羊舌航
2023-03-14

这是一个XML文档(XML声明和XSLT处理指令之前的句子和空格是输入的一部分):

This XML file does not appear to have any style information associated with it. The document tree is shown below.


    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="/3.0/style/exchange.xsl"?>
      <mts:meta name="elapsed-time" value="18" />
      <exchange-documents>
        <exchange-document country="US" number="8049504">
        ....
        ....
        ....

        </exchange-document>
      </exchange-documents>

我正在解析XML并使用XPath。在大多数XML文件中,第一行包含一些文本或空格(参考上面的XML)

如果没有前导文本,则会成功解析,但如果出现任何文本,则会产生以下错误:

--- exec-maven-plugin:1.2.1:exec (default-cli) @ XMLHandling ---

[致命错误]:1:1:Prolog中不允许有内容。

我怎么能绕过这件事?

我正在使用的代码:

public static void main(String[] args) throws ParseException {

        String filePath = "D:/newxml.xml";

        try {
            FileInputStream file = new FileInputStream(new File(filePath));
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = builderFactory.newDocumentBuilder();
             Document xmlDocument = builder.parse(file);
            XPath xPath = XPathFactory.newInstance().newXPath();

            String pubOrPatentNumber = xPath.compile("//preference").evaluate(xmlDocument);
            ...
            ...
            }
            }

我可以手动删除文本并执行,但我需要在我的代码中解决这一点,以自动清理输入。

共有1个答案

潘阳舒
2023-03-14

从格式良好的角度来看,文档中有两个问题。

>

  • 不允许有两个顶级元素(mts:meta、exchange-documents)。

    声明前缀mts。

    这个修改后的文档格式良好(但需要为mts调整名称空间URI,并为包装元素选择适当的名称):

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="/3.0/style/exchange.xsl"?>
    <root>
        <mts:meta xmlns:mts="http://www.example.com" name="elapsed-time" value="18" />
        <exchange-documents>
            <exchange-document country="US" number="8049504">
                ....
                ....
                ....
            </exchange-document>
        </exchange-documents>
    </root>
    

  •  类似资料:
    • 我试图在Java运行一个程序,它接受一个自定义的XML文件并对其进行解析。我正在使用XML文件进行存储。我在错误日志中得到以下错误。 XML文件的开头包括: 程序能够读入XML文件。我得到了上面的错误。下面是一段代码片段: 在我看来,我的XML文件的prolog中没有无效的内容。我想不出有什么问题。请帮帮忙。多谢了。

    • 问题内容: 我正在尝试调用Web服务,但是遇到了奇怪的行为。我们的服务器上正在运行一个Web服务,但是该代码未向我们开放,因此无法看到墙后发生了什么。该服务的所有者公开了基于Web的测试客户端UI,该UI在文本框中输入内容,并显示对测试目的的响应。此输入框采用以下提到的格式输入 它在此UI上工作正常,但是当我尝试通过Java代码调用此Web服务时,它也将获得连接以及被该服务授权,但是当我尝试调用上

    • 我有一个包含XML(包括主体和元数据)的字符串对象。当我试图解析它时,我得到以下错误: 组织。xml。萨克斯。SAXParseException;行号:1;列数:1;prolog中不允许包含内容 我尝试使用函数,但它没有帮助。我需要一些关于如何编辑我的XML的帮助,以便允许它。

    • 我正在使用IntelliJ Idea 2017.2。而我的项目是Gradle构建的多模块项目。我已经给出了我的项目的一个版本。然后它就坠毁了。我重新启动了IntelliJ,得到了以下消息 文件->使缓存无效/重新启动 这次我又犯了一个错误。 我再次尝试项目。但总是得到相同的错误。我搜索了throguh互联网,得到了以下问题。

    • 我有一个用UTF-16 LE编码的超级简单的XML文档。 我这样加载它(使用): 我通过保存文件并用十六进制编辑器检查它,检查了没有额外的BOM/垃圾符号(前导或任何地方)。XML格式正确。 但是,我仍然得到以下错误: 我上下搜索了这个错误,但他们都说这是BOM的错误,我(据我所知)已经证实不是这样。还有什么不对劲?