Xml文档读取尝试错误

时间:2014-04-19 16:10:38

标签: java xml domparser

在我的软件中,我正在尝试创建一个返回任何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)

3 个答案:

答案 0 :(得分:3)

  

根元素后面的文档中的标记必须格式正确。

有几个规则可以使XML格式良好:

  1. 所有XML元素必须具有结束标记;
  2. 标签应该是相同的情况;
  3. XML元素必须正确嵌套;
  4. XML文档必须具有根元素;
  5. 必须引用XML属性值;
  6. 某些符号具有特殊含义,必须进行转义(&gt;,&lt;,&amp;,',“)。
  7. 在提供的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格式不正确的问题。