Обработка XML в REXX И JCL

У меня есть данные XML в моем наборе данных PS, как показано ниже, в том же формате, что и ниже в моем PS, вот пример:

(**<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>onlinerecharge</display-name>
<filter>
    <filter-name>struts2</filter-name>`enter code here`
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>**)

Я хочу, чтобы весь XML-код входил в одну строку без каких-либо разрывов между ними, мне нужно делать это только на мэйнфреймах. Есть ли у нас какой-нибудь выход для этого в REXX или JCL, я хочу, чтобы мой вывод был похож на PS:

(http://www.w3.org...... так далее)

1 ответ

Это кажется странным требованием. XML-документы обычно бывают довольно "длинными", поэтому длина выходной записи должна быть не меньше, чем самый большой XML-документ, который вы будете обрабатывать. В IBM z/os, под которой, как я полагаю, вы будете работать, существует ограничение в 32 КБ для размера записи PS. Остерегайтесь этого ограничения.

В любом случае, попробуйте следующий REXX exec. Измените имена ВЫДЕЛЕННЫХ наборов данных (HLQ.XML.IN а также HLQ.XML.OUT) в соответствии с вашими потребностями, и он объединит все записи из входного набора данных в одну запись и запишет ее в выходной набор данных.

/* REXX */  
'ALLOCATE DA(''HLQ.XML.IN'') F(XMLIN) SHR'  
'ALLOCATE DA(''HLQ.XML.OUT'') F(XMLOUT) OLD'  
'EXECIO * DISKR XMLIN(FINIS STEM REC.'  
XOUT = ''  
DO I = 1 TO REC.0    
  XOUT = XOUT || STRIP(REC.I)  
END  
QUEUE XOUT  
'EXECIO * DISKW XMLOUT(FINIS'  
'FREE DDNAME(XMLIN)'  
'FREE DDNAME(XMLOUT)'  
RETURN  

Примечание. Выходной набор данных необходимо создать перед запуском этого exec. Если нет, просто измените оператор ALLOCATE, чтобы создать его с необходимыми вам атрибутами набора данных.

Другие вопросы по тегам