DOCX4J XML 如何获取 JAXBNodes 的 "value"
DOCX4J XML how to get the "value" of a JAXBNodes
我想在 docx 文件中绑定一些 XML 变量(我的变量在 $varname$ 模式中)。所以我使用了一个函数,其中 return a List<Object>
是我对文档的搜索结果。
String xpath = "//w:r[w:t[starts-with(text(), '$')]]";
List<Object> list = this.getDocumentPart().getJAXBNodesViaXPath(xpath, false);
if(!list.isEmpty()){
for(int i = 0; i < list.size(); ++i){
System.out.println(list.get(i).getClass());
}
}
打印结果为:
class org.docx4j.wml.R
class org.docx4j.wml.R
class org.docx4j.wml.R
但现在我想获取 "value" ie $varname$ 以将其与地图进行比较(关键是每个变量的名称)?
您的 XML 可能是以下形式:
<w:r>
<w:t>$varname$</w:t>
</w:r>
但不一定。也可以有其他内容,所以它的内容模型是一个列表。
如果您只想用其他一些纯文本替换 $varname$,那么您最好使用:
String xpath = "//w:t[starts-with(text(), '$')]";
因为这将 return 文本对象;然后您将获得它们的当前值,然后将其设置为其他值。
按照您目前的方式,您需要获取 R 的内容列表(首先将对象转换为 R),并检查每个项目以查看它是否是包含您的 $varname$ 的 w:t .
我找到了解决方案:
if(!list.isEmpty()){
List<Object> listObjNode;
for(int i = 0; i < list.size(); ++i){
List<Object> r = ((R)list.get(i)).getContent();
for(int j = 0; j < r.size(); ++j){
javax.xml.bind.JAXBElement jaxb = (javax.xml.bind.JAXBElement)r.get(j);
org.docx4j.wml.Text t = (org.docx4j.wml.Text)jaxb.getValue();
System.out.println(t);
}
}
}
我想在 docx 文件中绑定一些 XML 变量(我的变量在 $varname$ 模式中)。所以我使用了一个函数,其中 return a List<Object>
是我对文档的搜索结果。
String xpath = "//w:r[w:t[starts-with(text(), '$')]]";
List<Object> list = this.getDocumentPart().getJAXBNodesViaXPath(xpath, false);
if(!list.isEmpty()){
for(int i = 0; i < list.size(); ++i){
System.out.println(list.get(i).getClass());
}
}
打印结果为:
class org.docx4j.wml.R
class org.docx4j.wml.R
class org.docx4j.wml.R
但现在我想获取 "value" ie $varname$ 以将其与地图进行比较(关键是每个变量的名称)?
您的 XML 可能是以下形式:
<w:r>
<w:t>$varname$</w:t>
</w:r>
但不一定。也可以有其他内容,所以它的内容模型是一个列表。
如果您只想用其他一些纯文本替换 $varname$,那么您最好使用:
String xpath = "//w:t[starts-with(text(), '$')]";
因为这将 return 文本对象;然后您将获得它们的当前值,然后将其设置为其他值。
按照您目前的方式,您需要获取 R 的内容列表(首先将对象转换为 R),并检查每个项目以查看它是否是包含您的 $varname$ 的 w:t .
我找到了解决方案:
if(!list.isEmpty()){
List<Object> listObjNode;
for(int i = 0; i < list.size(); ++i){
List<Object> r = ((R)list.get(i)).getContent();
for(int j = 0; j < r.size(); ++j){
javax.xml.bind.JAXBElement jaxb = (javax.xml.bind.JAXBElement)r.get(j);
org.docx4j.wml.Text t = (org.docx4j.wml.Text)jaxb.getValue();
System.out.println(t);
}
}
}