XmlParserToDoc

来源:互联网 发布:淘宝上的酷狗会员没了 编辑:程序博客网 时间:2024/06/05 19:24
package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultAttribute;
import test.CreateDocumentImpl;

public class XmlParserToDoc
{

    private  CreateDocumentImpl docDocument;
    //    @SuppressWarnings("unchecked")
    //    public XmlParserToDoc(Element elm)
    //    {
    //        docDocument = new CreateDocumentImpl();
    //        String fileSrc = "E:\\华为.doc";
    //        Map attrlist = getNoteAttributes(elm);
    //        docDocument.initDocument(fileSrc, attrlist);
    //       // docDocument.openPdf();
    //    }
    @SuppressWarnings("unchecked")
    public  XmlParserToDoc(Element elm)
    {
        docDocument = new CreateDocumentImpl();
        String fileSrc = "E:\\华为.doc";
        Map attrlist = getNoteAttributes(elm);
        docDocument.initDocument(fileSrc, attrlist);
        docDocument.openPdf();
    }
    public void closePdf()
    {
        docDocument.closePdf();
    }
    public static void main(String args[]) throws DocumentException
    {
        ArrayList<String> xml_path = new ArrayList<String>();
        xml_path.add("E:\\User2.xml");
        xml_path.add("E:\\gao.xml");
       
       for(int i=0;i<xml_path.size();i++)
      {
        SAXReader reader = new SAXReader();
        Document doc = reader.read(xml_path.get(i));
        Element root = doc.getRootElement();
        XmlParserToDoc nnd = new XmlParserToDoc(root);
        nnd.getElementList(root);
       }
       
       docDocument.closePdf()
      
 
    }

    /**
     * 获取节点所有属性值 <功能详细描述>
     * @param element
     * @return
     * @see
     */
    @SuppressWarnings("unchecked")
    public Map getNoteAttributes(Element element)
    {

        DefaultAttribute e = null;
        List list = element.attributes();
        Map<String, String> attrmaps = new HashMap<String, String>();
        for (int i = 0; i < list.size(); i++)
        {
            e = (DefaultAttribute)list.get(i);
            attrmaps.put(e.getName(), e.getValue());
        }
        return attrmaps;
    }

    /**
     * 递归遍历所有元素节点 <功能详细描述>
     * @param element
     * @see [类、类#方法、类#成员]
     */
    public void getElementList(Element element)
    { // 适配器
        adpateXmlElement(element);
    }

    /**
     * 适配器xml
     */
    @SuppressWarnings("unchecked")
    public void adpateXmlElement(Element elm)
    {
        if ("table".equals(elm.getName()))
        {
            handleTable(elm);
        }
        else if ("list".equals(elm.getName()))
        {
            // 做列表的处理
            handleList(elm);

        }
        else
        {
            List elements = elm.elements();
            if (elements.isEmpty())
            {

                if ("image".equals(elm.getParent().getName()))
                {
                    handleImage(elm);
                }
                else if ("second_title".equals(elm.getParent().getName()))
                {
                    handleSecondTitle(elm);
                }
                else if ("first_title".equals(elm.getParent().getName()))
                {
                    handleFirstTitle(elm);
                }
                else if ("caption".equals(elm.getName()))
                {
                    handleCaption(elm);
                }
                else
                {
                    handleOther(elm);
                }
            }
            else
            {
                // 有子元素
                Iterator it = elements.iterator();
                while (it.hasNext())
                {

                    Element elem = (Element)it.next();
                    getElementList(elem);
                }
            }
        }
    }

    public void close()
    {
        docDocument.closePdf();
    }

    /**
     * 处理表格标签
     */
    @SuppressWarnings("unchecked")
    public void handleTable(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        List tableValues = new ArrayList();
        List trNodes = elm.elements();
        for (Iterator trNode = trNodes.iterator(); trNode.hasNext();)
        {
            Element trContent = (Element)trNode.next();
            List tdNodes = trContent.elements();
            for (Iterator tdNode = tdNodes.iterator(); tdNode.hasNext();)
            {
                Element tdContent = (Element)tdNode.next();
                String tdData = (String)tdContent.getData();
                tableValues.add(tdData);
            }
        }
        docDocument.addTable(tableValues, attrlist);
    }

    /**
     * 处理列表标签
     *
     */
    @SuppressWarnings("unchecked")
    public void handleList(Element elm)
    {
        // 做列表的处理
        Map attrlist = getNoteAttributes(elm);
        List itemNodes = elm.elements();
        List dataSource = new ArrayList();
        for (Iterator itemNode = itemNodes.iterator(); itemNode.hasNext();)
        {
            Element itemContent = (Element)itemNode.next();
            String itemData = (String)itemContent.getData();
            dataSource.add(itemData);
        }
        docDocument.addItem(dataSource, attrlist);
    }

    /**
     * 处理一级标题
     *
     */
    @SuppressWarnings("unchecked")
    public void handleFirstTitle(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource;

        //System.out.println("wangjin:" + elm.getParent().attribute("id"));
        if (elm.getParent().attribute("id") == null)
        {
            dataSource = "·" + elm.getText();
        }
        else if (elm.getParent().getParent().attribute("id") == null)
        {
            dataSource = "·" + elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }
        else
        {
            dataSource = "·" + elm.getParent().getParent().attributeValue("id")
                    + "." + elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }
        docDocument.addText(dataSource, attrlist);
    }

    /**
     * 处理列二级标题
     *
     */
    @SuppressWarnings("unchecked")
    public void handleSecondTitle(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource;
        if (elm.getParent().attribute("id") == null)
        {
            dataSource = elm.getText();
        }
        else if (elm.getParent().getParent().attribute("id") == null)
        {
            dataSource = "·" + elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }
        else if (elm.getParent().getParent().getParent().attribute("id") == null)
        {
            dataSource = "·" + elm.getParent().getParent().attributeValue("id")
                    + "." + elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }
        else
        {
            dataSource = "·"
                    + elm.getParent().getParent().getParent().attributeValue(
                        "id") + "."
                    + elm.getParent().getParent().attributeValue("id") + "."
                    + elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }

        docDocument.addText(dataSource, attrlist);
    }

    /**
     * 处理图片
     */
    @SuppressWarnings("unchecked")
    public void handleImage(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource = elm.getText();
        docDocument.addImage(dataSource, attrlist);
    }

    /**
     *处理章节标题
     *
     */
    @SuppressWarnings("unchecked")
    public void handleCaption(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource = elm.getText();
        docDocument.addText(dataSource, attrlist);
    }

    /**
     * 处理其他的标题
     */
    @SuppressWarnings("unchecked")
    public void handleOther(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource = elm.getText();
        if (elm.getParent().attribute("id") == null)
        {
            dataSource = elm.getText();
        }
        else
        {
            dataSource = elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
            docDocument.startNewPage();
            System.err.println(elm.getParent().attribute("flag"));
        }

        docDocument.addText(dataSource, attrlist);

    }
}


原创粉丝点击