簡體   English   中英

在Java中使用反射API解析xml

[英]parsing xml using reflection api in java

這是我的XML文件。

<customer>
  <Field Number = '1' Value = '3'>
    <Name>customer1</Name>
    <Length>2</Length>
    <Type>regular</Type>
    <Method Number = '1'>pay through cash</Method>
    <Method Number = '2'>pay through card</Method>
  </Field>
  <Field Number = '2'>
    <Name>customer2</Name>
    <Length>2</Length>
    <Type>rare</Type>
  </Field>
  <Field Number = '3'>
    <Name>customer3</Name>
    <Length>4</Length>
    <Type>regular</Type>
  </Field>
</customer>

我應該使用Java語言中的任何解析器來解析此文件。
但是我的Java源代碼不應包含xml文件的任何組件,例如node.getAttributes().getNamedItem("Name").getNodeValue(); 在上面的說明中,我使用了“名稱”,但我不應該使用它。
哪種解析器對於這種情況是有效的。甚至歡迎使用代碼段。
我必須能夠即時解析此文件,並將標記內容用作類成員以及setter和getter方法。因此,我使用了反射API。

我假設您已經有相應的類型。 您可能需要對它們進行稍微的更改,因為沒有具體說明(要避免這種情況),您將很難將具有相同名稱的xml元素分配給字段(可能是集合)。 例如,您必須調用一個名為So的元素,因此屬於集合的每個元素都應作為集合(可以包含任何元素)或列表(可以包含同類元素)來處理

<ExampleSet>
  <ExampleList>
    <ExampleType>example1</ExampleType>
    <ExampleType>example2</ExampleType>
  </ExampleList>
  <OtherExampleType>example3</OtherExampleType>
</ExampleSet>

現在,您可以使用相應的界面(每種說法分別為XmlSet,XmlList,XmlType)標記每種類型。 現在,您可以解析它們,知道它們是否是集合,它們是否構成其他類型,如果它們是列表,則它們是類型的集合,或者它們僅僅是類型。 現在,您可以根據通過反射確定的字段類型,使用反射將XmlType的值或屬性分配給String,int,long或所需的任何值。

下面是一個非常抽象的想法,如果您需要更多詳細信息,請告訴我:

void readXml(Xml xml) {
  if (xml instanceof XmlSet) readSet(xml);
  else if (xml instanceof XmlList) readList(xml);
  else if (xml instanceof XmlType) readType(xml);
}

void readSet(Xml xml) {
  /*here you loop through the elements of set and call readXml(child)*/
}

void readList(Xml xml) {
  /*here you loop through the elements of list and call readXml(child).*/
}

void readType(Xml xml) {
  /* Here you use reflection to populate the value of elements with the corresponding java types */
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM