XWPFDocument中XmlCursor的使用

类名:

java 复制代码
org.apache.xmlbeans
Interface XmlCursor

版本:

原xml代码:

xml 复制代码
<w:p w14:paraId="143E3662" w14:textId="4167FBA7" w:rsidR="001506F2" w:rsidRPr="003F3D89" w:rsidRDefault="001506F2" w:rsidP="001506F2">
<w:pPr>
<w:pStyle w:val="a1"/>
<w:ind w:firstLine="459"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:hAnsi="宋体"/>
<w:lang w:eastAsia="zh-CN"/>
</w:rPr>
</w:pPr>
<w:r w:rsidRPr="003F3D89">
<w:rPr>
<w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
<w:lang w:eastAsia="zh-CN"/>
</w:rPr>
<w:t>本文</w:t>
</w:r>
</w:p>

运行代码:遍历xmlObject的每一个元素的每一个属性

java 复制代码
 public ParagraphChildOrderManager(XWPFParagraph paragraph) {
        //using a cursor to go through the paragraph from top to down
        XmlCursor xmlcursor = paragraph.getCTP().newCursor();
        while (xmlcursor.hasNextToken()) {
            XmlCursor.TokenType tokenType = xmlcursor.toNextToken();
            System.out.println("苏菲亚公主~");
        }
    }

进入while之前的xmlcursor,通过xmlcursor.getObject()方法得到:

xml 复制代码
<xml-fragment w14:paraId="143E3662" w14:textId="4167FBA7" w:rsidR="001506F2" w:rsidRPr="003F3D89" w:rsidRDefault="001506F2" w:rsidP="001506F2" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:oel="http://schemas.microsoft.com/office/2019/extlst" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
  <w:pPr>
    <w:pStyle w:val="a1"/>
    <w:ind w:firstLine="459"/>
    <w:rPr>
      <w:rFonts w:ascii="宋体" w:hAnsi="宋体"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
  </w:pPr>
  <w:r w:rsidRPr="003F3D89">
    <w:rPr>
      <w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    <w:t>本文</w:t>
  </w:r>
  </xml-fragment>

在sout这行打上断点,tokenType和xmlcursor.getObject()的内容在遍历中按照顺序依次显示为:

xml 复制代码
tokenType = ATTR <xml-fragment ......>143E3662</xml-fragment>
tokenType = ATTR <xml-fragment ......>4167FBA7</xml-fragment>
tokenType = START
<xml-fragment>
<w:pStyle w:val="a1"/>
  <w:ind w:firstLine="459"/>
  <w:rPr>
    <w:rFonts w:ascii="宋体" w:hAnsi="宋体"/>
    <w:lang w:eastAsia="zh-CN"/>
  </w:rPr>
</xml-fragment>
tokenType = START
<xml-fragment w:val="a1" ....../>
tokenType = ATTR <xml-fragment>a1</xml-fragment>
tokenType = END null
tokenType = START <xml-fragment w:firstLine="459" ....../>
tokenType = ATTR <xml-fragment>459</xml-fragment>
......
<w:rPr>的位置,显示:tokenType = START
</w:rPr>的位置,显示:tokenType = END
相关推荐
Grey Zeng1 小时前
Java SE 25新增特性
java·jdk·jdk新特性·jdk25
雨白2 小时前
Java 线程通信基础:interrupt、wait 和 notifyAll 详解
android·java
架构师沉默6 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
Java中文社群8 小时前
重要:Java25正式发布(长期支持版)!
java·后端·面试
每天进步一点_JL9 小时前
JVM 类加载:双亲委派机制
java·后端
用户298698530149 小时前
Java HTML 转 Word 完整指南
java·后端
渣哥9 小时前
原来公平锁和非公平锁差别这么大
java
渣哥9 小时前
99% 的人没搞懂:Semaphore 到底是干啥的?
java
J2K10 小时前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
kfyty72510 小时前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构