【问题标题】:Translating JSON to XML using XSD to keep whitespace使用 XSD 将 JSON 转换为 XML 以保留空格
【发布时间】:2020-10-29 05:32:47
【问题描述】:

我目前正在使用 ODI 将 JSON 格式的数据导入 Oracle 数据库。我目前使用的是复杂文件拓扑,这需要我识别 JSON 文件和用于将其转换为 XML 的 XSD,然后才能将数据映射到数据库中的表中。

我有一个名为 sample.json 的 JSON 文件:

{"DATA_DS": {"G_1": [
    {
        "FIELDA": "Test Data   ",
        "FIELDB": "12345",
        "FIELDC": "   ",
        "FIELDD": null,
        "FIELDE": "   Test Data"
    }
]}}

我有一个名为 sample.xsd 的 XSD:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://TargetNamespace.com/InboundService" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://TargetNamespace.com/InboundService" elementFormDefault="qualified" nxsd:version="JSON" nxsd:encoding="UTF-8">
   <xsd:element name="Root-Element">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="DATA_DS">
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="G_1" maxOccurs="unbounded">
                        <xsd:complexType>
                           <xsd:sequence>
                              <xsd:element name="FIELDA" type="xsd:string"/>
                              <xsd:element name="FIELDB" type="xsd:string"/>
                              <xsd:element name="FIELDC" type="xsd:string"/>
                              <xsd:element name="FIELDD" type="xsd:string"/>
                              <xsd:element name="FIELDE" type="xsd:string"/>
                           </xsd:sequence>
                        </xsd:complexType>
                     </xsd:element>
                  </xsd:sequence>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>

当尝试从 JSON 转换为 XML 时,它说它无法规范化。 经过进一步调查,我注意到该错误是由于 FIELDC 只有空间造成的。

我希望能够保留双引号内的所有内容,包括空格。

我尝试过两次更改 XSD,但无济于事。

  1. 创建了一个 simpleType 并更改了内部每个元素的类型以使用新的 simpleType:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://TargetNamespace.com/InboundService" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://TargetNamespace.com/InboundService" elementFormDefault="qualified" nxsd:version="JSON" nxsd:encoding="UTF-8">
   <xsd:element name="Root-Element">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="DATA_DS">
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="G_1" maxOccurs="unbounded">
                        <xsd:complexType>
                           <xsd:sequence>
                              <xsd:element name="FIELDA" type="stringspace"/>
                              <xsd:element name="FIELDB" type="stringspace"/>
                              <xsd:element name="FIELDC" type="stringspace"/>
                              <xsd:element name="FIELDD" type="stringspace"/>
                              <xsd:element name="FIELDE" type="stringspace"/>
                           </xsd:sequence>
                        </xsd:complexType>
                     </xsd:element>
                  </xsd:sequence>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
   <xsd:simpleType name="stringspace">
      <xsd:restriction base="xsd:string">
         <xsd:whiteSpace value="preserve" />
      </xsd:restriction>
   </xsd:simpleType>
</xsd:schema>
  1. 在每个元素内创建了一个 simpleType 并标识以保留空格:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://TargetNamespace.com/InboundService" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://TargetNamespace.com/InboundService" elementFormDefault="qualified" nxsd:version="JSON" nxsd:encoding="UTF-8">
   <xsd:element name="Root-Element">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="DATA_DS">
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="G_1" maxOccurs="unbounded">
                        <xsd:complexType>
                           <xsd:sequence>
                              <xsd:element name="FIELDA"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
                              <xsd:element name="FIELDB"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
                              <xsd:element name="FIELDC"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
                              <xsd:element name="FIELDD"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
                              <xsd:element name="FIELDE"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
                           </xsd:sequence>
                        </xsd:complexType>
                     </xsd:element>
                  </xsd:sequence>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>

我对整个 JSON、XML、XSD 领域还是个新手,因此我们将不胜感激任何形式的帮助。 提前非常感谢! :)

【问题讨论】:

    标签: json xml xsd oracle-data-integrator


    【解决方案1】:

    你说“它说它不能正常化”,但你没有说“它”是什么。

    JSON 转 XML 的方法有很多种,你还没说你用的是哪一种。在我看来,“它”好像是您正在使用的特定转换工具或库,而您的问题出在这个工具或库上。

    此外,最好准确引用错误消息,而不是解释错误消息。这里可能有人认得它,可以准确地告诉你它的含义。

    【讨论】:

    • 他提到了 ODI(Oracle 数据集成器)。 @DinoDinz:问题是你的标签太笼统了(stringwhitespace 几乎没有用处)以至于使用该工具的人可能永远看不到这个问题。我已经为你添加了oracle-data-integrator 来代替那些。
    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 2017-07-10
    • 2011-11-03
    • 1970-01-01
    • 2018-07-23
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多