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;
/**
*
* Java递归遍历XML所有元素并做相应的处理
* @author Wang Jin
* @version 1.0, 2012-10-22
* @see
* @since
*/
public class XmlParserToPdf
{
private CreateDocumentImpl pdfDocument;
@SuppressWarnings("unchecked")
public XmlParserToPdf(Element elm)
{
pdfDocument = new CreateDocumentImpl();
String fileSrc = "E:\\wangjin.pdf";
Map attrlist = getNoteAttributes(elm);
pdfDocument.initDocument(fileSrc, attrlist);
pdfDocument.openPdf();
}
public static void main(String args[]) throws DocumentException
{
String path = "E:\\doc.xml";
// 读取XML文件
SAXReader reader = new SAXReader();
Document doc = reader.read(path);
// 获取XML根元素
Element root = doc.getRootElement();
XmlParserToPdf test = new XmlParserToPdf(root);
test.getElementList(root);
test.close();
}
/**
* 获取节点所有属性值 <功能详细描述>
* @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()
{
pdfDocument.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);
}
}
pdfDocument.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);
}
pdfDocument.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();
}
pdfDocument.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();
}
pdfDocument.addText(dataSource, attrlist);
}
/**
* 处理图片
*/
@SuppressWarnings("unchecked")
public void handleImage(Element elm)
{
Map attrlist = getNoteAttributes(elm);
String dataSource = elm.getText();
pdfDocument.addImage(dataSource, attrlist);
}
/**
*处理章节标题
*
*/
@SuppressWarnings("unchecked")
public void handleCaption(Element elm)
{
Map attrlist = getNoteAttributes(elm);
String dataSource = elm.getText();
pdfDocument.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();
}
pdfDocument.startNewPage();
pdfDocument.addText(dataSource, attrlist);
}
}
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;
/**
*
* Java递归遍历XML所有元素并做相应的处理
* @author Wang Jin
* @version 1.0, 2012-10-22
* @see
* @since
*/
public class XmlParserToPdf
{
private CreateDocumentImpl pdfDocument;
@SuppressWarnings("unchecked")
public XmlParserToPdf(Element elm)
{
pdfDocument = new CreateDocumentImpl();
String fileSrc = "E:\\wangjin.pdf";
Map attrlist = getNoteAttributes(elm);
pdfDocument.initDocument(fileSrc, attrlist);
pdfDocument.openPdf();
}
public static void main(String args[]) throws DocumentException
{
String path = "E:\\doc.xml";
// 读取XML文件
SAXReader reader = new SAXReader();
Document doc = reader.read(path);
// 获取XML根元素
Element root = doc.getRootElement();
XmlParserToPdf test = new XmlParserToPdf(root);
test.getElementList(root);
test.close();
}
/**
* 获取节点所有属性值 <功能详细描述>
* @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()
{
pdfDocument.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);
}
}
pdfDocument.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);
}
pdfDocument.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();
}
pdfDocument.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();
}
pdfDocument.addText(dataSource, attrlist);
}
/**
* 处理图片
*/
@SuppressWarnings("unchecked")
public void handleImage(Element elm)
{
Map attrlist = getNoteAttributes(elm);
String dataSource = elm.getText();
pdfDocument.addImage(dataSource, attrlist);
}
/**
*处理章节标题
*
*/
@SuppressWarnings("unchecked")
public void handleCaption(Element elm)
{
Map attrlist = getNoteAttributes(elm);
String dataSource = elm.getText();
pdfDocument.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();
}
pdfDocument.startNewPage();
pdfDocument.addText(dataSource, attrlist);
}
}