JAXBのアンマーシャリングの例を使用してテキストを取得しようとしていますが、within ...タグを取得できません。これは私のコードをインデントの私の最初の質問、したがって、非常に不確かであるが、ここでは行く: LangFlag.javaJAXBを使用して要素から完全なテキストを取得することができません
package IDJAXBParser;
import java.util.List;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlType(propOrder = { "name", "description", "match", "context" })
@XmlRootElement(name = "langFlag")
public class LangFlag
{
String name;
public String getName()
{
return name;
}
@XmlAttribute(name = "name")
public void setName(String name)
{
this.name = name;
}
String description;
public String getDescription()
{
return description;
}
@XmlElement(name = "description")
public void setDescription(String description)
{
this.description = description;
}
String context;
@XmlAnyElement(BioHandler.class)
public String getContext()
{
return context;
}
public void setContext(String context)
{
this.context = context;
}
List<String> match;
public List<String> getMatch()
{
return match;
}
@XmlElement(name = "match")
public void setMatch(List<String> match)
{
this.match = match;
}
@Override
public String toString()
{
StringBuffer str = new StringBuffer("Name: " + getName() + "\n");
str.append("Description:" + getDescription() + "\n");
str.append("Context:" + getContext() + "\n");
str.append("Match:" + getMatch() + "\n");
str.append("\n");
return str.toString();
}
}
ListOfLangFlags.java
package IDJAXBParser;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "listOfLangFlags")
public class ListOfLangFlags
{
List<LangFlag> listOfLangFlags;
public List<LangFlag> getLangFlags()
{
return listOfLangFlags;
}
/**
* element that is going to be marshaled in the xml
*/
@XmlElement(name = "langFlag")
public void setLangFlags(List<LangFlag> listOfLangFlags)
{
this.listOfLangFlags = listOfLangFlags;
}
public void add(LangFlag langFlag)
{
if(this.listOfLangFlags == null)
{
this.listOfLangFlags = new ArrayList<LangFlag>();
}
this.listOfLangFlags.add(langFlag);
}
@Override
public String toString()
{
StringBuffer str = new StringBuffer();
for(LangFlag langFlag : this.listOfLangFlags)
{
str.append(langFlag.toString());
}
return str.toString();
}
}
UnMarshalJAXVBComplete.java パッケージIDJAXBParser。
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import IDJAXBParser.ListOfLangFlags;
public class UnMarshalJAXVBComplete
{
public static void main(String[] args)
{
try
{
File file = new File("testv1.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(ListOfLangFlags.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
ListOfLangFlags langFlags = (ListOfLangFlags)jaxbUnmarshaller.unmarshal(file);
System.out.println(langFlags);
}
catch(JAXBException e)
{
e.printStackTrace();
}
}
}
これは私のXMLドキュメントです:
<listOfLangFlags>
<langFlag name="Lang Flag Name">
<description>Lang Flag Description</description>
<context begin="0" end="100">I am so <span class="locality">blue </span>
I'm greener than purple. </context>
<suggestions/>
<match>I am so</match>
<match>blue</match>
</langFlag>
</listOfLangFlags>
BioHandler.java
package IDJAXBParser;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.annotation.DomHandler;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public class BioHandler implements DomHandler<String, StreamResult> {
private static final String BIO_START_TAG = "<context>";
private static final String BIO_END_TAG = "</context>";
private StringWriter xmlWriter = new StringWriter();
public StreamResult createUnmarshaller(ValidationEventHandler errorHandler) {
xmlWriter.getBuffer().setLength(0);
return new StreamResult(xmlWriter);
}
public String getElement(StreamResult rt) {
String xml = rt.getWriter().toString();
int beginIndex = xml.indexOf(BIO_START_TAG) + BIO_START_TAG.length();
int endIndex = xml.indexOf(BIO_END_TAG);
return xml.substring(beginIndex, endIndex);
}
public Source marshal(String n, ValidationEventHandler errorHandler) {
try {
String xml = BIO_START_TAG + n.trim() + BIO_END_TAG;
StringReader xmlReader = new StringReader(xml);
return new StreamSource(xmlReader);
} catch(Exception e) {
throw new RuntimeException(e);
}
}
}
任意の助けをいただければ幸いです!事前に感謝
これは私のコードの結果である: 名:ラングフラグ名 説明:ラングフラグ説明 コンテキスト: \t \t \t \t \t \tは、私が紫より環境に優しいです。 マッチ:[私はそう、青] – javaNoob2792
あなたの期待どおりの結果は?ところで、 '@ XmlAnyElement(BioHandler.class)'を指定するので、 'BioHandler.java'のソースコードも投稿してください。 –
@ベクヤン、予想される結果は、コンテキストフィールドからテキスト全体を取り戻すことです。つまり、私はとても青く、私は紫よりも緑です。 – javaNoob2792