Xml 平面文件中出现NULL,无法使用XSD进行分析
我们正在尝试将基于位置的平面文件()转换为有效的XML。该文件包含标题、详细信息行和尾部 细节线有数据字符、空白字符和其他一些特殊字符,如NULL 填充一个位置长度的空字符。空间也填充一个位置长度 我们使用以下XSD来解析这个平面文件Xml 平面文件中出现NULL,无法使用XSD进行分析,xml,xsd,flat-file,Xml,Xsd,Flat File,我们正在尝试将基于位置的平面文件()转换为有效的XML。该文件包含标题、详细信息行和尾部 细节线有数据字符、空白字符和其他一些特殊字符,如NULL 填充一个位置长度的空字符。空间也填充一个位置长度 我们使用以下XSD来解析这个平面文件 <?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchem
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
xmlns:tns="http://xmlns.oracle.com/pcbpel/nxsdABO"
targetNamespace="http://xmlns.oracle.com/pcbpel/nxsdABO"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
nxsd:version="NXSD"
nxsd:stream="chars"
nxsd:encoding="ISO-8859-1"
>
<xsd:element name="ROOT">
<xsd:complexType>
<xsd:sequence minOccurs="1">
<xsd:element name="Header" nxsd:startsWith="H" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="InterfaceID" type="xsd:string" nxsd:style="fixedLength" nxsd:length="3" />
<xsd:element name="FileSeqNo" type="xsd:int" nxsd:style="fixedLength" nxsd:length="5" />
<xsd:element name="TimeStamp" type="xsd:int" nxsd:style="fixedLength" nxsd:length="14" />
<xsd:element name="FromSystem" type="xsd:string" nxsd:style="fixedLength" nxsd:length="10" />
<xsd:element name="ToSystem" type="xsd:string" nxsd:style="fixedLength" nxsd:length="10" minOccurs="0"/>
<xsd:element name="FromSAPSys" type="xsd:string" nxsd:style="fixedLength" nxsd:length="8" minOccurs="0"/>
<xsd:element name="FromSAPclt" type="xsd:string" nxsd:style="fixedLength" nxsd:length="3" minOccurs="0"/>
<xsd:element name="ToSAPSys" type="xsd:string" nxsd:style="fixedLength" nxsd:length="8" minOccurs="0"/>
<xsd:element name="ToSAPclt" type="xsd:string" nxsd:style="fixedLength" nxsd:length="4" minOccurs="0"/>
<xsd:element name="UserID" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="DataLine2" nxsd:startsWith="D012" maxOccurs="unbounded" minOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TransactionType" type="xsd:string" nxsd:style="fixedLength" nxsd:length="2" minOccurs="0"/>
<xsd:element name="Name" type="xsd:string" nxsd:style="fixedLength" nxsd:length="30" />
<xsd:element name="PostingKey" type="xsd:string" nxsd:style="fixedLength" nxsd:length="11" />
<xsd:element name="AdderssKey" type="xsd:string" nxsd:style="fixedLength" nxsd:length="26" />
<xsd:element name="TransactionKey" type="xsd:byte" nxsd:style="terminated" nxsd:terminatedBy="${eol}" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Trailer" nxsd:startsWith="T" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FRecords" type="xsd:string" nxsd:style="fixedLength" nxsd:length="9" minOccurs="0"/>
<xsd:element name="DRecords" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
SOA套件11g文件适配器无法解析平面文件,当文件具有空字符时,它将返回空XML文档
但当我们用whi替换空值时,一切都很顺利
我们在XSD中是否缺少用于解析NULL的内容
有没有其他方法来处理NULL
需要其他人的指导如果NULL是指代码点为0的Unicode字符(通常写为NUL),那么XML中不允许使用此字符,您必须将其转换为其他字符。好的,我们找到了解决方法 我们创建了自定义Java,用WhiteAPCE替换NUL
String fileName =(String)getVariableData("FileName");
String fileLocation =(String)getVariableData("FileLocation");
String inputFile = fileLocation + "/" + fileName;
String outputFile = fileLocation + "/" + fileName + ".temp";
FileInputStream fileInStream = new FileInputStream(inputFile);
DataInputStream inputStream = new DataInputStream(fileInStream);
BufferedReader bufferRead = new BufferedReader(new InputStreamReader(inputStream));
String stringLine = "";
FileWriter fileOutStream = new FileWriter(outputFile);
BufferedWriter bufferWrite = new BufferedWriter(fileOutStream);
while ((stringLine = bufferRead.readLine()) != null) {
stringLine = stringLine.replaceAll("\0", " ");
bufferWrite.write(stringLine);
bufferWrite.newLine();
}
bufferWrite.close();
在上述代码中
stringLine = stringLine.replaceAll("\0", " ");
将用witespace替换NUL字符在将NUL字符转换为XML文件时,有没有办法转义NUL字符?或者给我一个提示,我们如何使用自定义Java程序替换NUL?您总是可以编写一个自定义InputStream实现来进行过滤。