XML標準に技術的に適合しないデータでJAXBを使用しようとしています。特に、要素の名前は数字で始まるため、技術的に無効です。スキーマがどのように見えるかの概要は次のとおりです。
<xs:element name = "ITEM">
<xs:complexType>
<xs:sequence>
<xs:element name="01" />
<xs:element name="08" />
<xs:element name="10">
<xs:complexType>
<xs:sequence>
<xs:element name="10_A" />
<xs:element name="10_B" />
</xs:sequence>
</xs:complexType>
</xs:element>
...
...Many more elements...
...
</xs:sequence>
</xs:complexType>
</xs:element>
残念ながら、これを変更することはできません。完全なITEMは巨大であり、多くのレベルの深さがあるため、JAXBなどの自動化ツールを使用してクラスを作成する必要があります。そのために、XJCが受け入れるように、要素の名前の前に文字(この場合は「m」)を付けました。実行時に、入力をJavaオブジェクトにアンマーシャリングするために、XMLタグをJavaクラスにマップできることを期待していました。特に、次のようなものです。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"m01",
"m08",
"m10",
...
})
@XmlRootElement(name = "ITEM")
public class ITEM {
@XmlElement(name = "01")
protected String m01;
@XmlElement(name = "08")
protected String m08;
@XmlElement(name = "10")
protected M10 m10;
...
}
M10は次のようになります。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"m10a",
"m10b",
...
})
public static class M10 {
@XmlElement(name = "10_A")
protected String m10a;
@XmlElement(name = "10_B")
protected String m10b;
...
}
JAXBが@XmlElementタグを入力のタグに一致させることができることを期待していましたが、残念ながら、JAXBには不適切なタグを持つこのビジネスがないため、これはうまくいきませんでした。誰かが興味を持っている場合、特定の例外は次のとおりです。
org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup
この問題を回避する方法について誰かアドバイスがありますか?JAXBが入力XMLを解析する前に(したがってこの問題を完全に回避して)入力XMLで正規表現スワップを実行できる可能性があるように感じますが、そのような方法で入力を変更することはかなり望ましくありません。