<w:bookmarkStart> <!--书签开始-->
<w:bookmarkEnd> <!--书签结束-->
/**
* word书签开始部分
*/
public static final String BOOKMARK_START_TAG = "w:bookmarkStart";
/**
* word书签结束部分
*/
public static final String BOOKMARK_END_TAG = "w:bookmarkEnd";
/**
* 获取书签内容并返回
*
* @param wordPath
* @param fileName
* @return
*/
public String getBookMarkContent(String wordPath,String fileName){
isFileExit(wordPath,fileName);
List<String> resBookMarkContent = new ArrayList<>();
String resStr = "";
try {
FileInputStream inputStream = new FileInputStream(wordPath);
// HWPF提供读写Microsoft Word DOC格式档案的功能。
XWPFDocument docx = new XWPFDocument(inputStream);
// 获取body部分的dom对象
Node bodyNode = docx.getDocument().getBody().getDomNode();
List<Node> bookmarkNodeList = new ArrayList<>();
// 获取书签
getBookmarksFromNode(bodyNode, bookmarkNodeList);
// 对结果进行遍历 并获取具体名称
for (Node node : bookmarkNodeList) {
String nodeValue = node.getAttributes().getNamedItem("w:name").getNodeValue();
resBookMarkContent.add(nodeValue);
}
resStr = String.join(" ", resBookMarkContent);
}catch (Exception e){
throw new CheckRuntimeException(LaboratoryStatusEnum.LABORATORY_DOMAIN_52079);
}
return resStr;
}
/**
* 递归解析所有Node节点,将bookmark记录到集合中
*
* @param node
* @param bookmarkNodeList
*/
public void getBookmarksFromNode(Node node, List<Node> bookmarkNodeList) {
// 如果nod的名称是书签开始<w:bookmarkStart> <!--书签开始-->
if (node.getNodeName().equals(BOOKMARK_START_TAG)) {
bookmarkNodeList.add(node);
}else if(node.getNodeName().equals(BOOKMARK_END_TAG)){
// 如果书签结束 直接退出
return ;
}else {
// 递归获取子节点书签
NodeList childNodes = node.getChildNodes();
for (int i = 0, j = childNodes.getLength(); i < j; i++) {
Node childNode = childNodes.item(i);
getBookmarksFromNode(childNode, bookmarkNodeList);
}
}
}