получение атрибута minOccurs с использованием XSOM из элемента - PullRequest
3 голосов
/ 19 января 2010

Как получить атрибут minOccurs от элемента с помощью синтаксического анализатора XSOM? Я видел этот пример для получения атрибутов, связанных со сложным типом:

private void getAttributes(XSComplexType xsComplexType){
    Collection<? extends XSAttributeUse> c = xsComplexType.getAttributeUses();
    Iterator<? extends XSAttributeUse> i = c.iterator();while(i.hasNext()){
        XSAttributeDecl attributeDecl = i.next().getDecl();
        System.out.println("type: "+attributeDecl.getType());
        System.out.println("name:"+attributeDecl.getName());
    }
}

Но, похоже, не могу понять, как правильно подобрать такой элемент как:

<xs:element name="StartDate" type="CommonDateType" minOccurs="0"/>

Спасибо!

Ответы [ 2 ]

3 голосов
/ 19 января 2010

Так что на самом деле это не так интуитивно понятно, но XSElementDecl происходит от XSParticles. Мне удалось получить соответствующий атрибут с помощью следующего кода:

public boolean isOptional(final String elementName) {
    for (final Entry<String, XSComplexType> entry : getComplexTypes().entrySet()) {
        final XSContentType content = entry.getValue().getContentType();
        final XSParticle particle = content.asParticle();
        if (null != particle) {
            final XSTerm term = particle.getTerm();
            if (term.isModelGroup()) {
                final XSParticle[] particles = term.asModelGroup().getChildren();
                for (final XSParticle p : particles) {
                    final XSTerm pterm = p.getTerm();
                    if (pterm.isElementDecl()) {
                        final XSElementDecl e = pterm.asElementDecl();
                        if (0 == e.getName().compareToIgnoreCase(elementName)) {
                            return p.getMinOccurs() == 0;
                        }
                    }
                }
             }
          }
    }
    return true;
}
0 голосов
/ 07 декабря 2012

В xsom, декларация элемента имеет тип XSElementDecl. Для получения минимального и максимального вхождения элемента вам необходимо получить ParticleImpl. т.е.

public int getMinOccurrence(XSElementDecl element){

 int min=((ParticleImpl)element.getType()).getMinOccurs();
 return min; 

}

ref: XSOM Part ref ref

...