在我的软件中,我正在尝试创建一个返回任何xml文件的类,看看代码及其给出的错误,我无法弄清楚如何纠正它:(
Xml:
<everConfigured>
<value>false</value>
</everConfigured>
<ServerPort>
<value>9000</value>
</ServerPort>
<ClientPort>
<value>8000</value>
</ClientPort>
XML Reader类:
public static String getValue(String Path,String Tag,String Atribute) throws IOException, SAXException, ParserConfigurationException
{
File fXmlFile = new File(Path);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName(Tag);
Node nNode = nList.item(0);
Element eElement = (Element) nNode;
return eElement.getAttribute(Atribute);
}
以下是我的称呼方式:
public static void main(String[] args) throws SocketException, IOException, SAXException, ParserConfigurationException {
System.out.println(
XMLRead.getValue("/home/ghhwer/Desktop/settings.xml", "everConfigured","value"));
}
但返回此错误:
[Fatal Error] settings.xml:5:2: The markup in the document following the root element must be well-formed.
Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:/home/ghhwer/Desktop/settings.xml; lineNumber: 5; columnNumber: 2; The markup in the document following the root element must be well-formed.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:348)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
at program.XMLRead.getValue(XMLRead.java:20)
at program.Start.main(Start.java:12)
答案 0 :(得分:3)
根元素后面的文档中的标记必须格式正确。
有几个规则可以使XML格式良好:
在提供的XML片段中,根元素缺失,这就是解析器抱怨的原因。 因此,格式良好的XML将是:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<everConfigured>
<value>false</value>
</everConfigured>
<ServerPort>
<value>9000</value>
</ServerPort>
<ClientPort>
<value>8000</value>
</ClientPort>
</config>
请参阅http://www.w3schools.com/xml/xml_syntax.asp作为XML语法参考。
答案 1 :(得分:2)
我认为问题是在XML中只能有一个根元素,但你有三个。
您必须将文件重组为:
<?xml version="1.0" encoding="UTF-8"?>
<OneRootElement>
<everConfigured>
<value>false</value>
</everConfigured>
<ServerPort>
<value>9000</value>
</ServerPort>
<ClientPort>
<value>8000</value>
</ClientPort>
</oneRootElement>
根级别上格式良好的XML的错误应该消失
答案 2 :(得分:0)
问题是XML验证错误,要修复它通过在线验证工具(如http://www.xmlvalidation.com/)运行文件或使用IDE验证它。
该工具将更好地查明原因,在这种情况下,它似乎是一个XML格式不正确的问题。