当试图解析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;
}
是什么导致了这一切,我该如何解决呢?任何帮助或帮助都将不胜感激,谢谢。
发布于 2015-10-21 05:28:35
DocumentBuilder.parse(String)
方法需要一个URI,然后该方法尝试打开URI。如果你想直接传递字符串的内容,你必须把它作为一个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
发布于 2015-10-21 05:26:24
问题的解决实际上是解析方法。
基于这里:http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html
根据文档,该方法解析(字符串uri),将给定URI的内容解析为XML文档,并返回一个新的DOM文档对象。
解决方案将作为byteStream读入
新ByteArrayInputStream(xml.getBytes("utf-8"))));(新InputSource)
https://stackoverflow.com/questions/33250982
复制相似问题