获取 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();

                    }
             .... ....... ...... ..... 
                 }
   }