You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pentaho PDI 9.3 XML校验报错cvc-complex-type.2.4.c求助

问题分析与解决方案

问题详情

使用Pentaho PDI 9.3的XML验证组件(转换)校验XML文件时,返回错误:

cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'AppHdr'

XML中的AppHdr属于head.001.001.01命名空间,将所有XML和XSD文件放在同一目录时,Notepad++可以正常校验通过,但PDI未提供更多错误细节。

相关代码

XML文件(head.003)

<?xml version="1.0" encoding="UTF-8"?>
<BizData xmlns="urn:iso:std:iso:20022:tech:xsd:head.003.001.01"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Hdr >
      <AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.01"
              xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:head.001.001.01 head.001.001.01.xsd">
         <Fr >
            <OrgId>
               <Id>
                  <OrgId>
                     <Othr>
                        <Id>DMBOS</Id>
                        <SchmeNm>
                           <Cd>COD</Cd>
                        </SchmeNm>
                        <Issr>Issr</Issr>
                     </Othr>
                  </OrgId>
               </Id>
            </OrgId>
         </Fr>
         <To >
            <OrgId>
               <Id>
                  <OrgId>
                     <Othr>
                        <Id>DMBOS</Id>
                        <SchmeNm>
                           <Cd>COD</Cd>
                        </SchmeNm>
                        <Issr>Issr</Issr>
                     </Othr>
                  </OrgId>
               </Id>
            </OrgId>
         </To>
         <BizMsgIdr >BizMsgIdr</BizMsgIdr>
         <MsgDefIdr >MsgDefIdr</MsgDefIdr>
         <CreDt >2024-01-12T15:10:50.073Z</CreDt>
      </AppHdr>
   </Hdr>
   <Pyld >
      <Document xmlns="urn:iso:std:iso:20022:tech:xsd:auth.108.001.01"
                xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:auth.108.001.01 auth.108.001.01.xsd">
         <DerivsTradMrgnDataRpt >
            <RptHdr>
               <NbRcrds>-418680</NbRcrds>
            </RptHdr>
            <TradData>
               <DataSetActn>NOTX</DataSetActn>
            </TradData>
         </DerivsTradMrgnDataRpt>
      </Document>
   </Pyld>
</BizData>

XSD文件(head.003)

<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:head.003.001.01" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:head.003.001.01">
    <xs:element name="BizData" type="BusinessDataHeaderV01"/>
    <xs:complexType name="BusinessApplicationHeaderEnvelope">
        <xs:sequence>
            <xs:any namespace="urn:iso:std:iso:20022:tech:xsd:head.001.001.01" processContents="strict"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="BusinessDataHeaderV01">
        <xs:sequence>
            <xs:element name="Hdr" type="BusinessApplicationHeaderEnvelope"/>
            <xs:element name="Pyld" type="StrictPayload"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="StrictPayload">
        <xs:sequence>
            <xs:any namespace="##any" processContents="strict"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

原因分析

Notepad++会自动读取同目录下xsi:schemaLocation指向的XSD文件,但PDI的XML验证组件默认不会自动加载这些外部依赖的XSD,或者解析器配置限制了本地文件读取,导致无法找到AppHdr元素的定义。

解决方案

1. 显式添加所有依赖XSD到PDI组件

在PDI的XML验证组件设置中,不要仅指定主XSD文件(head.003.001.01.xsd),需将head.001.001.01.xsd和auth.108.001.01.xsd也添加到组件的XSD文件列表中,确保所有依赖的Schema都被加载。

2. 在主XSD中显式引入依赖命名空间

修改head.003的XSD文件,添加xs:import标签引入head.001.001.01命名空间的XSD:

<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:head.003.001.01" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:head.003.001.01">
    <!-- 新增引入head.001的XSD -->
    <xs:import namespace="urn:iso:std:iso:20022:tech:xsd:head.001.001.01" schemaLocation="head.001.001.01.xsd"/>
    
    <xs:element name="BizData" type="BusinessDataHeaderV01"/>
    <xs:complexType name="BusinessApplicationHeaderEnvelope">
        <xs:sequence>
            <xs:any namespace="urn:iso:std:iso:20022:tech:xsd:head.001.001.01" processContents="strict"/>
        </xs:sequence>
    </xs:complexType>
    <!-- 其余代码不变 -->
</xs:schema>

这样PDI加载主XSD时会自动尝试加载依赖的XSD文件,注意确保文件路径正确。

3. 检查PDI XML解析器配置

部分XML解析器默认会禁用本地文件读取,需确认PDI使用的解析器是否允许加载本地XSD文件。可以尝试调整组件的高级配置,开启外部实体支持(需注意安全风险,仅在可信环境下操作)。


内容的提问来源于stack exchange,提问作者fifibanana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:14:56