【问题标题】:No protocol malformed URL Exception thrown at me when trying to parse an XML String尝试解析 XML 字符串时没有向我抛出协议格式错误的 URL 异常
【发布时间】:2016-01-19 23:00:16
【问题描述】:

在尝试解析 XML 字符串时,我收到了一个格式错误的 URL 异常。

这是堆栈跟踪:

java.net.MalformedURLException: no protocol: <explanation>
<NodeExplanations>
    <IDAfterSkipProcessing>/Temporary/isMfs</IDAfterSkipProcessing>
    <NodeExplanation>
        <ID>/Temporary/isMfs</ID>
        <SkippedToIDForExplanationData>/Temporary/isMfs</SkippedToIDForExplanationData>
        <Value>false</Value>
        <Gist>Equals</Gist>
        <Scenario>NOT_EQUAL</Scenario>
        <Title>IsMfs</Title>
        <Phrase>
            <Text>isMfs</Text>
        </Phrase>
        <Question>
            <Text>isMfs</Text>
        </Question>
        <ExplanationText>
            <Text>We can't get any more details on </Text>
            <NodeName>
                <Text>isMfs</Text>
            </NodeName>
            <Text> right now.</Text>
        </ExplanationText>
        <InputNodes>
            <InputNodeEntry>
                <ID>/Return/ReturnData/IRS1040/IndividualReturnFilingStatusCd</ID>
                <Role>Value</Role>
                <Value>2</Value>
                <Type>CALCULATED_NODE</Type>
                <HasSubExplanations>false</HasSubExplanations>
            </InputNodeEntry>
            <InputNodeEntry>
                <ID>/Constants/IRS1040/FilingStatus/MarriedFilingSeparatelyCd</ID>
                <Role>Value</Role>
                <Value>3</Value>
                <Type>CONSTANT_NODE</Type>
                <HasSubExplanations>false</HasSubExplanations>
            </InputNodeEntry>
        </InputNodes>
        <Children>
            <ID>/Return/ReturnData/IRS1040/IndividualReturnFilingStatusCd</ID>
        </Children>
    </NodeExplanation>
</NodeExplanations>
</explanation>

    at java.net.URL.<init>(URL.java:585)
    at java.net.URL.<init>(URL.java:482)
    at java.net.URL.<init>(URL.java:431)
    at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)

我不知道为什么,XML 肯定是有效的并且没有格式错误?

这是进行解析的代码:

static Document getDocument(String xml) throws FileNotFoundException {

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db;
    Document doc = null;

    try {
        db = dbf.newDocumentBuilder();
        doc = db.parse(xml);
        doc.getDocumentElement().normalize();
    } 
    catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    }
    return doc;
}

这是什么原因造成的,我该如何解决?任何帮助或帮助将不胜感激,谢谢。

【问题讨论】:

  • 检查您发布的 xml 中 对应的 标记。它丢失了。
  • 它在第一行,上面写着“java.net.MalformedURLException: no protocol:
  • 我认为问题在于类 DocumentBuilder 的 parse 方法在 xml 中采用的方式
  • 检查 xml 中的一些无效字符,你是从某个地方下载这个 xml 吗?

标签: java xml malformedurlexception


【解决方案1】:

DocumentBuilder.parse(String) 方法需要 URI,然后该方法尝试打开 URI。我你想直接传递String的内容,你必须给它作为一个InputStream。

DocumentBuilder db = ...;
String xml = ...;
db.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("utf-8"))));

本文档可能会有所帮助 http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html

【讨论】:

    【解决方案2】:

    发现问题实际上是 parse 方法。

    基于这里:http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html

    根据文档,方法 parse(String uri) 将给定 URI 的内容解析为 XML 文档并返回一个新的 DOM Document 对象。

    解决方案将作为字节流读入

    db.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("utf-8"))));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 2020-01-04
      相关资源
      最近更新 更多