JAVA中的org.w3c.dom.Document

时间:2015-04-07 05:06:29

标签: java xml

我正在处理XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<IDFS>
      <sunnydry>
            <idf>4.3562937</idf>
            <nbrOfRep>1.0</nbrOfRep>
      </sunnydry>
      <bresnahan>
            <idf>4.3562937</idf>
            <nbrOfRep>1.0</nbrOfRep>
      </bresnahan>
      <half>
            <idf>3.9534276</idf>
            <nbrOfRep>5.7123914</nbrOfRep>
      </half>
</IDFS>

我使用这些函数来读取单词的任何idf和nbrOfRep

public float getIdfOfWordIndocument(String str)
    {
        try
        {
            return Float.parseFloat(document.getElementsByTagName(str.toLowerCase())
                    .item(0).getChildNodes().item(0).getTextContent()); 
        }
        catch(Exception e)
        {
            return 0.0f;
        }

    }

    // To read nbr of reputation of a word
    public float getNbrOfRepfWordIndocument(String str)
    {
        return Float.parseFloat(document.getElementsByTagName(str.toLowerCase())
                .item(0).getChildNodes().item(1).getTextContent());
    }

第一个给出错误,第二个给出错误的结果。但是,当我将代码更改为:

public float getIdfOfWordIndocument(String str)
        {
            try
            {
                return Float.parseFloat(document.getElementsByTagName(str.toLowerCase())
                        .item(0).getChildNodes().item(1).getTextContent()); 
            }
            catch(Exception e)
            {
                return 0.0f;
            }

        }

        // To read nbr of reputation of a word
        public float getNbrOfRepfWordIndocument(String str)
        {
            return Float.parseFloat(document.getElementsByTagName(str.toLowerCase())
                    .item(0).getChildNodes().item(3).getTextContent());
        }

这两个函数都运行良好,但我无法理解为什么要进行此更改:

  

在第一名:.item(0) - &gt; .item(1)   和   在第二名:.item(1) - &gt; .item(3)

我使用此代码编写XML文件:

    public void addToXML( String str, float idf, float nbrOfRep)
            {

                Element e = null;
                Element name = null;
                Element rootEle = (Element) document.getFirstChild();

                // create data elements and place them under root
                name = document.createElement(str.toLowerCase());
                rootEle.appendChild(name);

                e = document.createElement("idf");
                e.appendChild(document.createTextNode(Float.toString(idf)));
                name.appendChild(e);

                e = document.createElement("nbrOfRep");
                          e.appendChild(document.createTextNode(Float.toString(nbrOfRep)));
                name.appendChild(e);

                // doc.appendChild(rootEle);

                try{
                    Transformer tr =  TransformerFactory.newInstance().newTransformer();
                    tr.setOutputProperty(OutputKeys.INDENT, "yes");              
                     tr.setOutputProperty("{http://xml.apache.org/xslt}indent- amount","6");

                // send DOM to file             
try{
                    tr.transform(new DOMSource(document), new StreamResult(                         new FileOutputStream(filePath)));
            } 
catch (FileNotFoundException e)             
{
                    // TODO Auto-generated catch block
                    e.printStackTrace();            }

            } 
catch (TransformerException te)         
{           
System.out.println(te.getMessage());        
}
            }// end

1 个答案:

答案 0 :(得分:1)

元素之间有文本节点:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<IDFS>
      <sunnydry><!-- Text node 0 here
         --><idf>4.3562937</idf><!-- Text node 2 here
         --><nbrOfRep>1.0</nbrOfRep>
      </sunnydry>
      <!-- ... -->
</IDFS>

所以:

  1. 节点0:文本节点
  2. 节点1:idf元素节点
  3. 节点2:文本节点
  4. 节点3:nbrOfRep元素节点