遇到此问题时,我正在使用Apache POI从Word文档中提取内容。
我正在使用以下代码提取超链接。
XWPFDocument document = ...
var it = this.document.getBodyElementsIterator();
XWPFParagraph para;
IBodyElement be;
while(it.hasNext()){
be=it.next();
String et = be.getElementType().name();
System.out.println("element type>>"+et);
switch (et) {
case "PARAGRAPH":
para = (XWPFParagraph) be;
result.addContent(this.parseParagraph(para));
break;
case "TABLE":
......
......
var runsIt = para.getIRuns().iterator();
while(runsIt.hasNext()) {
var irun = runsIt.next();
if (irun instanceof XWPFSDT) {
var fsdt = (XWPFSDT) irun;
System.out.println("FSDT"+fsdt.toString());
} else {
// it is xwpfrun
var run = (XWPFRun) irun;
if (irun instanceof XWPFHyperlinkRun) {
sb.append(extractHyperLink(run));
}else if(irun instanceof XWPFFieldRun) {
var fieldRun= (XWPFFieldRun)irun;
System.out.println("FieldRun: Instruction>"+fieldRun.getFieldInstruction()+"Text>"+fieldRun.getText(0));
}
else {
sb.append(run);
}
这很好,但是后来我遇到了一个文档,在该文档中未提取超链接。相关部分的XML摘录如下:
<w:p w:rsidP="005F1646" w:rsidRDefault="00A20D69" w:rsidR="005F1646">
<w:pPr>
<w:r>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r>
<w:instrText xml:space="preserve"> HYPERLINK "https://stackoverflow.com" </w:instrText>
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r w:rsidR="005F1646" w:rsidRPr="00D4262C">
<w:rPr>
<w:rStyle w:val="Hyperlink"/>
</w:rPr>
<w:t>Ask on StackOverFlow</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rStyle w:val="Hyperlink"/>
</w:rPr>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:p>
Apache POI不会将本段中的运行提取为XWPFHyperlinkRun,并且我的代码无法提取超链接。 在这种情况下,如何使用Apache POI提取超链接信息?