20

要素の種類ごとに 1 つのアダプターを作成しようとしているので、bindings.xml ファイルを作成しました。

<jxb:bindings node="//xs:attribute[@type='Id']"

したがって、私の意図は、タイプ「Id」のすべての属性に対処することです。問題は、xjc が「ターゲット ノードが多すぎます(3)」と表示することです。

4

2 に答える 2

40

multiple="true" 属性を追加してみてください:

<jxb:bindings multiple="true" node="//xs:attribute[@type='Id']"
于 2012-12-07T17:27:54.957 に答える
0

「ターゲットノードが多すぎる(3)」という同様の問題が発生しますが、どのサイトでも答えが見つかりませんでした...多くの試行錯誤の末に見つけた解決策を投稿します...解決するための基本的なアイデア」 too many target nodes(3)" は、XSD で複数あるノードの完全な XPATH を与えることです。

以下は私のXSDです:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="document">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="asset">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="attribute" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="string" minOccurs="0">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute type="xs:string" name="value" use="optional"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="date" minOccurs="0">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute type="xs:string" name="value" use="optional"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="array" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="struct"  maxOccurs="unbounded" minOccurs="0">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="field" maxOccurs="unbounded" minOccurs="0">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="integer" minOccurs="0">
                                        <xs:complexType>
                                          <xs:simpleContent>
                                            <xs:extension base="xs:string">
                                              <xs:attribute type="xs:byte" name="value"/>
                                            </xs:extension>
                                          </xs:simpleContent>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="assetreference" minOccurs="0">
                                        <xs:complexType>
                                          <xs:simpleContent>
                                            <xs:extension base="xs:string">
                                              <xs:attribute type="xs:string" name="type"/>
                                              <xs:attribute type="xs:long" name="value"/>
                                            </xs:extension>
                                          </xs:simpleContent>
                                        </xs:complexType>
                                      </xs:element>
                                    </xs:sequence>
                                    <xs:attribute type="xs:string" name="name" use="optional"/>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="integer" minOccurs="0">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:string">
                                  <xs:attribute type="xs:long" name="value"/>
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="file" minOccurs="0">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute type="xs:string" name="name" use="optional"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="integer" minOccurs="0">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute type="xs:short" name="value"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute type="xs:string" name="name" use="optional"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:long" name="id"/>
            <xs:attribute type="xs:string" name="type"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

以下は、上記の XSD で機能する JAXB バインディング ファイルです。

<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          version="2.1">
    <bindings schemaLocation= "../assetproduct.xsd" version="1.0">
        <!-- Customise the package name 
        <schemaBindings>
            <package name="com.example.schema"/>
        </schemaBindings> -->

        <!-- rename the value element -->
        <bindings node="//xs:element[@name='document']">
            <bindings node="//xs:element[@name='asset']">
                <bindings node="//xs:element[@name='attribute']">

                    <bindings node="//xs:element[@name='string']">
                        <bindings node=".//xs:attribute[@name='value']">
                            <property name="ValueAttribute"/>
                        </bindings>
                    </bindings>


                    <bindings node="//xs:element[@name='date']">
                        <bindings node=".//xs:attribute[@name='value']">
                            <property name="ValueAttribute"/>
                        </bindings>
                    </bindings>

                    <bindings node="//xs:element[@name='array']">

                        <bindings node=".//xs:element[@name='struct']">
                            <bindings node=".//xs:element[@name='field']">

                                <bindings node=".//xs:element[@name='integer']/xs:complexType">
                                    <bindings node=".//xs:attribute[@name='value']">
                                        <property name="ValueAttribute"/>
                                    </bindings>
                                </bindings>

                                <bindings node=".//xs:element[@name='assetreference']">
                                    <bindings node=".//xs:attribute[@name='value']">
                                        <property name="ValueAttribute"/>
                                    </bindings>
                                </bindings>

                            </bindings>
                        </bindings>

                    </bindings>

                    <bindings node=".//xs:element[@name='array']/xs:complexType/xs:sequence/xs:element[@name='integer']">
                            <bindings node=".//xs:attribute[@name='value']">
                                <property name="ValueAttribute"/>
                            </bindings>
                    </bindings>

                    <bindings node="//xs:element[@name='attribute']/xs:complexType/xs:sequence/xs:element[@name='integer']">
                        <bindings node=".//xs:attribute[@name='value']">
                            <property name="ValueAttribute"/>
                        </bindings>
                    </bindings>
                </bindings>
            </bindings>
          </bindings>
    </bindings>
</bindings>
于 2015-08-06T12:26:23.253 に答える