获取 docx4j 中内容控件的标题或别名
Get the title or alias of a content control in docx4j
我想知道是否可以获得内容控件的标题。获取 Tag 非常容易,但无法访问 XML 中名为 alias 的标题。
当我问 class 时,我得到了平均值 "javax.xml.bind.JAXBElement"
这是我想要的 xml
<w:sdt>
<w:sdtPr>
<w:rPr>
<w:rStyle w:val="Calibri8"/>
</w:rPr>
<w:alias w:val="The title"/> <== I want this little guy
<w:tag w:val="RULE["BaseSalary"]"/>
<w:id w:val="51973609"/>
<w:placeholder>
<w:docPart w:val="DefaultPlaceholder_1081868574"/>
</w:placeholder>
这是我获取标签的方式:
for (Object alias : al) {
if ( alias.getClass().toString().contains("org.docx4j.wml.Tag")) {
//gets the Tag
String CTagVal = ((org.docx4j.wml.Tag) alias).getVal();
// If the tag contain ....
if (CTagVal.contains("RULE") || CTagVal.contains("CAL") ) {
...........................
获取Tag真的很容易,因为有一个叫Tag的class,但是为什么"alias" class不存在呢?
但更重要的是有办法得到它吗?或者 ???
提前致谢
对于那些想要答案的人!!
static Alias getAlias(SdtPr element) {
for (Object o : element.getRPrOrAliasOrLock()) {
if (o instanceof JAXBElement && ((JAXBElement)o).getValue() instanceof Alias) {
return ((JAXBElement<Alias>)o).getValue();
}
}
return null;
}
或
// for all elements get Tags and title
for (Object elem : al) {
org.docx4j.wml.SdtPr.Alias hello = null;
if (elem.getClass().toString().contains("avax.xml.bind.JAXBElement") &&
((javax.xml.bind.JAXBElement) elem).getValue().toString().contains("Alias")) {
hello = (Alias) ((javax.xml.bind.JAXBElement) elem).getValue();
System.out.println( hello.getVal() );
}
// tag part much easier
else if ( elem.getClass().toString().contains("org.docx4j.wml.Tag")) {
//gets the Tag
String CTagVal = ((org.docx4j.wml.Tag) elem).getVal();
..........
}
}
你也可以这样做:
// This is for the alias
@SuppressWarnings({ "unchecked", "rawtypes" })
Alias getAlias(SdtPr element) {
for (Object o : element.getRPrOrAliasOrLock()) {
if (o instanceof JAXBElement && ((JAXBElement)o).getValue() instanceof Alias) {
return ((JAXBElement<Alias>)o).getValue();
}
}
return null;
}
// this is for the tag
Tag getTag(SdtPr element) {
for (Object o : element.getRPrOrAliasOrLock()) {
if (o instanceof Tag) {
return (Tag) o;
}
}
return null;
}
当然你需要发送你的 sdtPr 元素:
你可以这样做:
for(SdtElement sdtElement: listOfSdtElements){ // if you have multiple sdtelements
SdtPr pr = sdtElement.getSdtPr();
//Gets tags and alias
Tag tag = getTag( pr);
String tagVal = "";
Alias alias = getAlias( pr);
// if it is indeed an alias
if(alias!=null){ // needed or else nullexception
String aliasVal = alias.getVal();
if(tag != null){ // needed or else nullexception
//gets the Tag
tagVal = tag.getVal();
}
.... ....... ...... .....
}
}
我想知道是否可以获得内容控件的标题。获取 Tag 非常容易,但无法访问 XML 中名为 alias 的标题。
当我问 class 时,我得到了平均值 "javax.xml.bind.JAXBElement"
这是我想要的 xml
<w:sdt>
<w:sdtPr>
<w:rPr>
<w:rStyle w:val="Calibri8"/>
</w:rPr>
<w:alias w:val="The title"/> <== I want this little guy
<w:tag w:val="RULE["BaseSalary"]"/>
<w:id w:val="51973609"/>
<w:placeholder>
<w:docPart w:val="DefaultPlaceholder_1081868574"/>
</w:placeholder>
这是我获取标签的方式:
for (Object alias : al) {
if ( alias.getClass().toString().contains("org.docx4j.wml.Tag")) {
//gets the Tag
String CTagVal = ((org.docx4j.wml.Tag) alias).getVal();
// If the tag contain ....
if (CTagVal.contains("RULE") || CTagVal.contains("CAL") ) {
...........................
获取Tag真的很容易,因为有一个叫Tag的class,但是为什么"alias" class不存在呢? 但更重要的是有办法得到它吗?或者 ??? 提前致谢
对于那些想要答案的人!!
static Alias getAlias(SdtPr element) {
for (Object o : element.getRPrOrAliasOrLock()) {
if (o instanceof JAXBElement && ((JAXBElement)o).getValue() instanceof Alias) {
return ((JAXBElement<Alias>)o).getValue();
}
}
return null;
}
或
// for all elements get Tags and title
for (Object elem : al) {
org.docx4j.wml.SdtPr.Alias hello = null;
if (elem.getClass().toString().contains("avax.xml.bind.JAXBElement") &&
((javax.xml.bind.JAXBElement) elem).getValue().toString().contains("Alias")) {
hello = (Alias) ((javax.xml.bind.JAXBElement) elem).getValue();
System.out.println( hello.getVal() );
}
// tag part much easier
else if ( elem.getClass().toString().contains("org.docx4j.wml.Tag")) {
//gets the Tag
String CTagVal = ((org.docx4j.wml.Tag) elem).getVal();
..........
}
}
你也可以这样做:
// This is for the alias
@SuppressWarnings({ "unchecked", "rawtypes" })
Alias getAlias(SdtPr element) {
for (Object o : element.getRPrOrAliasOrLock()) {
if (o instanceof JAXBElement && ((JAXBElement)o).getValue() instanceof Alias) {
return ((JAXBElement<Alias>)o).getValue();
}
}
return null;
}
// this is for the tag
Tag getTag(SdtPr element) {
for (Object o : element.getRPrOrAliasOrLock()) {
if (o instanceof Tag) {
return (Tag) o;
}
}
return null;
}
当然你需要发送你的 sdtPr 元素: 你可以这样做:
for(SdtElement sdtElement: listOfSdtElements){ // if you have multiple sdtelements
SdtPr pr = sdtElement.getSdtPr();
//Gets tags and alias
Tag tag = getTag( pr);
String tagVal = "";
Alias alias = getAlias( pr);
// if it is indeed an alias
if(alias!=null){ // needed or else nullexception
String aliasVal = alias.getVal();
if(tag != null){ // needed or else nullexception
//gets the Tag
tagVal = tag.getVal();
}
.... ....... ...... .....
}
}