【修改】 1、文件名称修改;2、word考点完善

This commit is contained in:
DESKTOP-932OMT8\REN
2025-05-14 10:04:42 +08:00
parent c8114f501a
commit b212e2d49c
13 changed files with 159 additions and 81 deletions

View File

@@ -1,27 +1,21 @@
package pc.exam.pp.module.judgement.controller.admin.WpsWord;
package pc.exam.pp.module.judgement.controller.admin.Wps;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import pc.exam.pp.framework.common.enums.CommonStatusEnum;
import pc.exam.pp.framework.common.pojo.CommonResult;
import pc.exam.pp.framework.common.util.object.BeanUtils;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordListReqVO;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordRespVO;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordSaveReqVO;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordSimpleRespVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordListReqVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordRespVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordSaveReqVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordSimpleRespVO;
import pc.exam.pp.module.judgement.dal.dataobject.wpsword.WpsWordLinkDO;
import pc.exam.pp.module.judgement.service.wps_word.WpsWordLinkService;
import pc.exam.pp.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
import pc.exam.pp.module.system.controller.admin.dept.vo.dept.DeptRespVO;
import pc.exam.pp.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
import pc.exam.pp.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO;
import pc.exam.pp.module.system.dal.dataobject.dept.DeptDO;
import java.util.List;

View File

@@ -1,18 +1,15 @@
package pc.exam.pp.module.judgement.controller.admin.WpsWord;
package pc.exam.pp.module.judgement.controller.admin.Wps;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import pc.exam.pp.framework.common.pojo.CommonResult;
import pc.exam.pp.module.judgement.service.wps_word.JudgementWpsWordService;
import pc.exam.pp.module.judgement.utils.wps_word.vo.WordVO;
import java.io.IOException;
import java.util.List;
/**
@@ -21,8 +18,8 @@ import java.util.List;
*/
@RestController
@RequestMapping("/tool/wps_word")
@Tag( name = "WPSWORD")
@RequestMapping("/tool/wps")
@Tag( name = "wps相关操作")
@Validated
public class WpsWordController {

View File

@@ -1,4 +1,4 @@
package pc.exam.pp.module.judgement.controller.admin.WpsWord.vo;
package pc.exam.pp.module.judgement.controller.admin.Wps.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -1,4 +1,4 @@
package pc.exam.pp.module.judgement.controller.admin.WpsWord.vo;
package pc.exam.pp.module.judgement.controller.admin.Wps.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -1,7 +1,6 @@
package pc.exam.pp.module.judgement.controller.admin.WpsWord.vo;
package pc.exam.pp.module.judgement.controller.admin.Wps.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

View File

@@ -1,4 +1,4 @@
package pc.exam.pp.module.judgement.controller.admin.WpsWord.vo;
package pc.exam.pp.module.judgement.controller.admin.Wps.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;

View File

@@ -1,10 +1,9 @@
package pc.exam.pp.module.judgement.dal.mysql.wpsword;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import pc.exam.pp.framework.mybatis.core.mapper.BaseMapperX;
import pc.exam.pp.framework.mybatis.core.query.LambdaQueryWrapperX;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordListReqVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordListReqVO;
import pc.exam.pp.module.judgement.dal.dataobject.wpsword.WpsWordLinkDO;
import pc.exam.pp.module.judgement.utils.tree.vo.TreeVO;
@@ -17,6 +16,7 @@ public interface WpsWordLinkMapper extends BaseMapperX<WpsWordLinkDO> {
default List<WpsWordLinkDO> selectList(WordListReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<WpsWordLinkDO>()
.likeIfPresent(WpsWordLinkDO::getName, reqVO.getName())
.eq(reqVO.getBelongTo() != null, WpsWordLinkDO::getBelongTo, reqVO.getBelongTo())
.eqIfPresent(WpsWordLinkDO::getStatus, reqVO.getStatus()));
}

View File

@@ -4,21 +4,12 @@ package pc.exam.pp.module.judgement.service.wps_excel;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import pc.exam.pp.module.exam.dal.dataobject.ExamQuestion;
import pc.exam.pp.module.exam.dal.dataobject.ExamQuestionAnswer;
import pc.exam.pp.module.infra.dal.dataobject.config.ConfigDO;
import pc.exam.pp.module.infra.service.config.ConfigService;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordListReqVO;
import pc.exam.pp.module.judgement.dal.dataobject.wpsword.WpsWordLinkDO;
import pc.exam.pp.module.judgement.dal.mysql.wpsword.WpsWordLinkMapper;
import pc.exam.pp.module.judgement.service.auto_tools.AutoToolsService;
import pc.exam.pp.module.judgement.utils.wps_excel.WpsExcelUtils;
import pc.exam.pp.module.judgement.utils.wps_word.WpsWordUtils;
import pc.exam.pp.module.judgement.utils.wps_word.vo.WordVO;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;
@Service
public class JudgementWpsExcelServiceImpl implements JudgementWpsExcelService {

View File

@@ -9,7 +9,7 @@ import pc.exam.pp.module.exam.dal.dataobject.ExamQuestionAnswer;
import pc.exam.pp.module.exam.utils.file.LogFileUtils;
import pc.exam.pp.module.infra.dal.dataobject.config.ConfigDO;
import pc.exam.pp.module.infra.service.config.ConfigService;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordListReqVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordListReqVO;
import pc.exam.pp.module.judgement.dal.dataobject.wpsword.WpsWordLinkDO;
import pc.exam.pp.module.judgement.dal.mysql.wpsword.WpsWordLinkMapper;
import pc.exam.pp.module.judgement.service.auto_tools.AutoToolsService;
@@ -17,8 +17,6 @@ import pc.exam.pp.module.judgement.utils.wps_word.WpsWordUtils;
import pc.exam.pp.module.judgement.utils.wps_word.vo.WordVO;
import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
@Service
@@ -35,6 +33,7 @@ public class JudgementWpsWordServiceImpl implements JudgementWpsWordService {
@Override
public List<WordVO> ProgrammingWpsWord(String path) throws Exception {
// 1、获取文件临时下载路径
ConfigDO config = configService.getConfigByKey("file_down_path");
// 2、下载文件并返回文件完整路径
@@ -42,9 +41,13 @@ public class JudgementWpsWordServiceImpl implements JudgementWpsWordService {
// 3、创建word考点tree
WordListReqVO wordListReqVO = new WordListReqVO();
wordListReqVO.setBelongTo(0);
List<WpsWordLinkDO> list = wpsWordLinkMapper.selectList(wordListReqVO);
// 3-1、查询段落的标签
List<WpsWordLinkDO> paragraphList = wpsWordLinkMapper.selectList(wordListReqVO);
// 3-2、查询锚点的标签
wordListReqVO.setBelongTo(3);
List<WpsWordLinkDO> anchorList = wpsWordLinkMapper.selectList(wordListReqVO);
// 4、docx文件读取并返回考点及说明信息
List<WordVO> margins1 = WpsWordUtils.wps_word(pathName, list);
List<WordVO> margins1 = WpsWordUtils.wps_word(pathName, paragraphList, anchorList);
// 5、已经读取完得考点删除源文件
File file = new File(pathName);
file.delete();
@@ -60,9 +63,13 @@ public class JudgementWpsWordServiceImpl implements JudgementWpsWordService {
// 1、查询Word考点tree
WordListReqVO wordListReqVO = new WordListReqVO();
wordListReqVO.setBelongTo(0);
List<WpsWordLinkDO> list = wpsWordLinkMapper.selectList(wordListReqVO);
// 3-1、查询段落的标签
List<WpsWordLinkDO> paragraphList = wpsWordLinkMapper.selectList(wordListReqVO);
// 3-2、查询锚点的标签
wordListReqVO.setBelongTo(3);
List<WpsWordLinkDO> anchorList = wpsWordLinkMapper.selectList(wordListReqVO);
// 2、docx文件读取并返回考点及说明信息
List<WordVO> margins1 = WpsWordUtils.wps_word(path, list);
List<WordVO> margins1 = WpsWordUtils.wps_word(path, paragraphList, anchorList);
// 3、获取答案得组成
List<ExamQuestionAnswer> answerList = examQuestion.getAnswerList();
// 4、进行关联判断

View File

@@ -1,8 +1,8 @@
package pc.exam.pp.module.judgement.service.wps_word;
import pc.exam.pp.framework.common.util.collection.CollectionUtils;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordListReqVO;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordSaveReqVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordListReqVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordSaveReqVO;
import pc.exam.pp.module.judgement.dal.dataobject.wpsword.WpsWordLinkDO;
import pc.exam.pp.module.judgement.utils.tree.vo.TreeVO;

View File

@@ -13,8 +13,8 @@ import pc.exam.pp.framework.common.enums.CommonStatusEnum;
import pc.exam.pp.framework.common.util.object.BeanUtils;
import pc.exam.pp.framework.datapermission.core.annotation.DataPermission;
import pc.exam.pp.framework.tenant.core.aop.TenantIgnore;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordListReqVO;
import pc.exam.pp.module.judgement.controller.admin.WpsWord.vo.WordSaveReqVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordListReqVO;
import pc.exam.pp.module.judgement.controller.admin.Wps.vo.WordSaveReqVO;
import pc.exam.pp.module.judgement.dal.dataobject.wpsword.WpsWordLinkDO;
import pc.exam.pp.module.judgement.dal.mysql.wpsword.WpsWordLinkMapper;
import pc.exam.pp.module.judgement.utils.tree.vo.TreeVO;

View File

@@ -18,36 +18,105 @@ public class WpsWordUtils {
/**
* 获取文档段落W:P标签得数量判断出一个有多少段
*/
public static List<WordVO> wps_word(String filePath, List<WpsWordLinkDO> wpsWordLinkDOS) throws Exception {
public static List<WordVO> wps_word(String filePath, List<WpsWordLinkDO> paragraphList, List<WpsWordLinkDO> anchorList) throws Exception {
List<WordVO> wordVO = new ArrayList<>();
int count = 0;
// 路径初始化
// 1、路径初始化
String xmlpath = "";
String type = "";
XWPFDocument document = new XWPFDocument(new FileInputStream(filePath));
String xmlString = XmlUtil.getDocumentXml(document);
// 获取CTDocument对象
// 2、创建最全的命名空间
Pattern pattern = Pattern.compile("xmlns:(\\w+)=\"([^\"]+)\"");
Matcher matcher = pattern.matcher(xmlString);
Map<String, String> namespaces = new HashMap<>();
while (matcher.find()) {
// 如 w, wp, a
String prefix = matcher.group(1);
// 如 http://schemas.openxmlformats.org/...
String uri = matcher.group(2);
namespaces.put(prefix, uri);
}
StringBuilder xpathBuilder = new StringBuilder();
namespaces.forEach((prefix, uri) ->
xpathBuilder.append("declare namespace ")
.append(prefix)
.append("='")
.append(uri)
.append("' ")
);
// 2-1、获取出来最全的命名空间
String allPathx = xpathBuilder.toString();
// 3、获取CTDocument对象
XmlObject docXml = document.getDocument();
List<WpsWordLinkDO> tree = TreeUtils.buildTree(wpsWordLinkDOS); // flatList 是你贴出的 JSON 解析出来的
XmlObject xmlObject = document.getDocument(); // Word XML document
// 创建一个list存放word读取的数据
for (WpsWordLinkDO wpsWordLinkDO : tree) {
// 3-1、段落的树数据
List<WpsWordLinkDO> paragraphTree = TreeUtils.buildTree(paragraphList);
// 3-2、锚点的树数据
List<WpsWordLinkDO> anchorTree = TreeUtils.buildTree(anchorList);
// Word XML document
XmlObject xmlObject = document.getDocument();
for (WpsWordLinkDO anchor : anchorTree) {
String xpathAnchor = allPathx + "//" + anchor.getName();
XmlCursor cursorAnchor = docXml.newCursor();
int index = 0;
cursorAnchor.selectPath(xpathAnchor);
while (cursorAnchor.toNextSelection()) {
type = "图片";
index += 1;
XmlCursor cursorAnchorXml = cursorAnchor.getObject().newCursor();
XmlCursor cursorAnchorText = cursorAnchor.getObject().newCursor();
// 首先:判断类型 1 图片2文本框
cursorAnchorXml.selectPath(allPathx + ".//wp:anchor/wp:docPr/@id");
String typeValue = "";
while (cursorAnchorXml.toNextSelection()) {
typeValue = cursorAnchorXml.getTextValue();
}
String anchorName = "图片";
if (Objects.equals(typeValue, "2")) {
System.out.println(cursorAnchorText.xmlText());
// 要获取文本框的文本
cursorAnchorText.selectPath(allPathx + ".//wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:txbx");
while (cursorAnchorText.toNextSelection()) {
System.out.println(cursorAnchorText.getObject().xmlText());
anchorName = cursorAnchorText.getTextValue();
}
}
cursorAnchorText.dispose();
cursorAnchorXml.dispose();
XmlObject paraObj = cursorAnchor.getObject();
for (WpsWordLinkDO root : anchor.getChildren()) {
traverseTreeAndQueryXml(type, wordVO, anchor.getName(), anchorName, allPathx, root, paraObj, new ArrayList<>(), new ArrayList<>(), index,1);
}
}
cursorAnchor.dispose();
}
// 创建一个list存放word读取的数据段落数据
for (WpsWordLinkDO paragraph : paragraphTree) {
type = "段落";
// 段落划分 根据w:p标签
// 到达参数节点,构造 XPath 路径查询它的值
String xpath = "declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' ";
xpath += "//"+wpsWordLinkDO.getName();
String wpPath = allPathx + "/w:document/w:body/" + paragraph.getName();
XmlCursor cursor = docXml.newCursor();
int index = 0;
cursor.selectPath(xpath);
String xpathName = "declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' ";
cursor.selectPath(wpPath);
while (cursor.toNextSelection()) {
String rTextName = "";
index += 1;
// 每一段进行赋值,进行判断
XmlObject paraObj = cursor.getObject();
String paraText = paraObj.xmlText();
// System.out.println(paraText);
// System.out.println(cursor.getTextValue());
index += 1;
for (WpsWordLinkDO root : wpsWordLinkDO.getChildren()) {
traverseTreeAndQueryXml(wordVO, wpsWordLinkDO.getName(), cursor.getTextValue(), xpathName, root, paraObj, new ArrayList<>(), new ArrayList<>(), index,1);
XmlCursor rCursor = paraObj.newCursor();
// 想要查询指定的path
rCursor.selectPath(allPathx + ".//w:r/w:t");
while (rCursor.toNextSelection()) {
XmlCursor rsCursor = rCursor.getObject().newCursor();
rTextName = rsCursor.getTextValue();
rsCursor.dispose();
}
rCursor.dispose();
// 创建新的
for (WpsWordLinkDO root : paragraph.getChildren()) {
traverseTreeAndQueryXml(type, wordVO, paragraph.getName(), rTextName, allPathx, root, paraObj, new ArrayList<>(), new ArrayList<>(), index,1);
}
}
}
@@ -59,14 +128,13 @@ public class WpsWordUtils {
}
// 获取底层 XML 对象
CTHdrFtr ctHdrFtr = header._getHdrFtr(); // ✅ 正确方法
String xpath = "declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' ";
xpath += "//w:hdr/w:p/w:r/w:pict";
String xpath = allPathx + "//w:hdr/w:p/w:r/w:pict";
XmlCursor cursor = ctHdrFtr.newCursor();
cursor.selectPath(xpath);
while (cursor.toNextSelection()) {
// 查询 v:textpath 节点
cursor.selectPath(
"declare namespace v='urn:schemas-microsoft-com:vml' " +
allPathx +
".//v:textpath"
);
while (cursor.toNextSelection()) {
@@ -86,6 +154,7 @@ public class WpsWordUtils {
path.add("name:"+stringAttr);
path.add("style:"+styleAttr);
attr_word.setExamKeynote(path);
attr_word.setType("水印");
wordVO.add(attr_word);
}
}
@@ -106,6 +175,7 @@ public class WpsWordUtils {
email_word.setWordText("邮件合并");
email_word.setExamKeynote(email);
email_word.setKeynoteChinese(email);
email_word.setType("邮件合并");
wordVO.add(email_word);
}
return wordVO;
@@ -126,6 +196,7 @@ public class WpsWordUtils {
style_list.add("加粗: " + run.isBold());
style_list.add("斜体: " + run.isItalic());
wordVO1.setKeynoteChinese(style_list);
wordVO1.setType("页眉,页脚");
wordVO.add(wordVO1);
}
}
@@ -145,17 +216,31 @@ public class WpsWordUtils {
style_list.add("加粗: " + run.isBold());
style_list.add("斜体: " + run.isItalic());
wordVO1.setKeynoteChinese(style_list);
wordVO1.setType("页眉,页脚");
wordVO.add(wordVO1);
}
}
}
}
}
public static void traverseTreeAndQueryXml(List<WordVO> wordVOs, String firstTitle, String text, String xpath, WpsWordLinkDO node, XmlObject currentXml, List<String> pathSoFar, List<String> pathChinese, int index, int beginIndex) {
/**
* @param type String 用来存放类型
* @param wordVOs List<WordVO> 用来存放结果
* @param firstTitle String 用来存放一级标题
* @param text String 用来存放文本
* @param xpath String 用来存放xpath
* @param node WpsWordLinkDO 用来存放节点
* @param currentXml XmlObject 用来存放当前xml
* @param pathSoFar List<String> 用来存放路径
* @param pathChinese List<String> 用来存放中文路径
* @param index int 用来存放索引
* @param beginIndex int 用来存放开始索引
*/
public static void traverseTreeAndQueryXml(String type, List<WordVO> wordVOs, String firstTitle, String text, String xpath, WpsWordLinkDO node, XmlObject currentXml, List<String> pathSoFar, List<String> pathChinese, int index, int beginIndex) {
// 到达参数节点,构造 XPath 路径查询它的值
if (beginIndex == 1) {
xpath += "//" + firstTitle + "[" + index + "]/";
xpath += "./";
}
pathSoFar.add(node.getName());
pathChinese.add(node.getToChinese() + index);
@@ -163,9 +248,9 @@ public class WpsWordUtils {
if (node.getType() == 1) {
// pathSoFar.remove(0);
xpath += String.join("/", pathSoFar);
// System.out.println(xpath);
try (XmlCursor cursors = currentXml.newCursor()) {
// System.out.println(xpath);
// System.out.println(cursors.xmlText());
cursors.selectPath(xpath);
if (cursors.toNextSelection()) {
// System.out.println(cursors.xmlText());
@@ -175,11 +260,11 @@ public class WpsWordUtils {
// System.out.println("值:" + texts);
// }
String text_value = cursors.getTextValue();
if (!Objects.equals(text_value, "")) {
String textValue = cursors.getTextValue();
if (!Objects.equals(textValue, "")) {
// 查找List里面是否已经存在相应文本的数据
String finalText = text;
int list_index = IntStream.range(0, wordVOs.size())
int listIndex = IntStream.range(0, wordVOs.size())
.filter(i -> finalText.equals(wordVOs.get(i).getWordText()))
.findFirst()
.orElse(-1);
@@ -197,15 +282,16 @@ public class WpsWordUtils {
woVo.setIsTrue(true);
List<String> kchinese = woVo.getKeynoteChinese();
List<String> examKeynote = woVo.getExamKeynote();
examKeynote.add(String.join("", pathSoFar) + "value" + text_value);
kchinese.add(String.join("", pathChinese) + ",值:" + text_value);
examKeynote.add(String.join("", pathSoFar) + "value" + textValue);
kchinese.add(String.join("", pathChinese) + ",值:" + textValue);
wordVO.setKeynoteChinese(kchinese);
wordVO.setExamKeynote(examKeynote);
wordVO.setType(type);
wordVOs.set(tindex, woVo);
}
tindex += 1;
}
} else if (list_index < 0) { // 如果没有查询到了
} else if (listIndex < 0) { // 如果没有查询到了
if (xpath.indexOf("w:sectPr[") > 0) {
// 页面属性
// 文本
@@ -219,35 +305,37 @@ public class WpsWordUtils {
// 创建list进行存放数据
List<String> kchinese = new ArrayList<>();
List<String> examKeynote = new ArrayList<>();
examKeynote.add(String.join("", pathSoFar) + "value" + text_value);
kchinese.add(String.join("", pathChinese) + ",值:" + text_value);
examKeynote.add(String.join("", pathSoFar) + "value" + textValue);
kchinese.add(String.join("", pathChinese) + ",值:" + textValue);
// 组合完数据后进行存放数据
wordVO.setKeynoteChinese(kchinese);
wordVO.setExamKeynote(examKeynote);
wordVO.setIsTrue(false);
wordVO.setType(type);
wordVOs.add(wordVO);
}
}
} else { // 如果找到了
WordVO wordVO = wordVOs.get(list_index);
WordVO wordVO = wordVOs.get(listIndex);
List<String> kchinese = wordVO.getKeynoteChinese();
List<String> examKeynote = wordVO.getExamKeynote();
examKeynote.add(String.join("", pathSoFar) + "value" + text_value);
kchinese.add(String.join("", pathChinese) + ",值:" + text_value);
examKeynote.add(String.join("", pathSoFar) + "value" + textValue);
kchinese.add(String.join("", pathChinese) + ",值:" + textValue);
wordVO.setKeynoteChinese(kchinese);
wordVO.setExamKeynote(examKeynote);
wordVO.setIsTrue(false);
wordVOs.remove(list_index);
wordVO.setType(type);
wordVOs.remove(listIndex);
wordVOs.add(wordVO);
}
// System.out.println("文本:" + text + " 参数路径:" + String.join(" → ", pathChinese) + ",值:" + text_value);
}
cursors.dispose();
}
}
} else {
for (WpsWordLinkDO child : node.getChildren()) {
traverseTreeAndQueryXml(wordVOs, firstTitle, text, xpath, child, currentXml, new ArrayList<>(pathSoFar), new ArrayList<>(pathChinese), index,2);
traverseTreeAndQueryXml(type, wordVOs, firstTitle, text, xpath, child, currentXml, new ArrayList<>(pathSoFar), new ArrayList<>(pathChinese), index,2);
}
}
pathSoFar.remove(pathSoFar.size() - 1);

View File

@@ -20,5 +20,7 @@ public class WordVO {
@Schema(description = "是否有样式修饰")
private Boolean isTrue;
@Schema(description = "类型")
private String type;
}