Синтаксический анализ XML с использованием Java - PullRequest
0 голосов
/ 16 декабря 2011
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body><getSessionId xmlns="http://treecorp.corp:8080/MEENH/service">
<multiRef xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="apachesoap:Map">
<item>
    <key xsi:type="soapenc:string">Application</key>
    <value xsi:type="soapenc:string">MobileDevice</value>
</item>
<item>
    <key xsi:type="soapenc:string">Version</key>
    <value xsi:type="soapenc:string">1.0</value>
</item>
<item>
    <key xsi:type="soapenc:string">Username</key>
    <value xsi:type="soapenc:string">ramau</value>
</item>
<item>
    <key xsi:type="soapenc:string">token</key>
    <value xsi:type="soapenc:string"></value>
</item>
<item>
    <key xsi:type="soapenc:string">sessionID</key>
    <value xsi:type="soapenc:string">SESSIONID</value>
</item>
<item>
    <key xsi:type="soapenc:string">OSInformation</key>
    <value xsi:type="soapenc:string">windowsXP</value>
</item>
</multiRef>
</getSessionId>
</soap:Body>
</soap:Envelope>

Это мой XML.

Я хочу проанализировать этот XML с помощью Java и получить значение на основе ключа. Вы можете видеть, что в XML есть много пар значений ключей.

Например, если я хочу получить значение для приложения, я должен получить значение как MobileDevice. Как это любезно кто-нибудь, помогите мне разобраться в этом вопросе.

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 16 декабря 2011

Есть еще один похожий вопрос .

Я лично использовал XOM и мне понравилось.

0 голосов
/ 31 марта 2019

Вы можете использовать DSM потоковую библиотеку для преобразования пары ключ-значение в список, а затем получить то, что вы хотите.

Это первый подход. Для этого вы должны определить свой файл сопоставления yaml следующим образом.

result:
  type: array     # result is array
  path: /.+item   # read item tag. the path is a regex.
  fields:
    key:
    value:

Java-код для разбора XML:

DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).setType(DSMBuilder.TYPE.XML).create();
List<Map<String, Object>> itemList =  (List<Map<String, Object>>)dsm.toObject(xmlFileContent);

Вот список itemList , преобразованный в json.

[ {
  "key" : "Application",
  "value" : "MobileDevice"
}, {
  "key" : "Version",
  "value" : "1.0"
}, {
  "key" : "Username",
  "value" : "ramau"
}, {
  "key" : "token",
  "value" : null
}, {
  "key" : "sessionID",
  "value" : "SESSIONID"
}, {
  "key" : "OSInformation",
  "value" : "windowsXP"
} ]

Второй подход заключается в преобразовании XML в Java-карту , что ключ карты равен значение ключевого тега и значение из карта представляет собой значение тега value в XML.

Вот файл сопоставления:

result:
  type: object     # result is map
  path: /.+multiRef # path is regex
  fields:
    key:
      path: item/key # read value of /.+multiRef/item/key tag
    value:
      path: item/value # read value of /.+multiRef/item/value tag
    application:
      parentPath: item  # assign default value when /.+multiRef/item tag is closed
      default: $self.data.value  # get value of value field.
      filter: $self.data.key=='Application' # assign if key filed is 'Application'
    version:
      parentPath: item
      default: $self.data.value
      filter: $self.data.key=='Version'
    username:
      parentPath: item
      default: $self.data.value
      filter: $self.data.key=='Username'
    token:
      parentPath: item
      default: $self.data.value
      filter: $self.data.key=='token'
    sessionID:
      parentPath: item
      default: $self.data.value
      filter: $self.data.key=='sessionID'
    OSInformation:
      parentPath: item
      default: $self.data.value
      filter: $self.data.key=='OSInformation'

Java-код для разбора XML:

DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).setType(DSMBuilder.TYPE.XML).create();
Map<String, Object> result =  (Map<String, Object>)dsm.toObject(xmlFileContent);

String application=result.get("application").toString()

Вот JSON-представление Результата:

{
  "key" : "OSInformation",
  "value" : "windowsXP",
  "application" : "MobileDevice",
  "version" : "1.0",
  "username" : "ramau",
  "token" : null,
  "sessionID" : "SESSIONID",
  "OSInformation" : "windowsXP"
}

Сначала это немного сложно, но если вы посмотрите на документы, это очень просто.

0 голосов
/ 16 декабря 2011

Так как это мыльный ответ, почему бы вам не написать хороший простой клиент веб-службы для получения ответа и автоматического превращения его в объекты для вас.

Вот пример этого здесь .

0 голосов
/ 16 декабря 2011

Используйте DOM, как показано здесь: http://www.java -samples.com / showtutorial.php? Tutorialid = 152 , например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...