xsd:assert 不工作:断言评估没有成功
xsd:assert not working : Assertion evaluation did not succeed
我是 XSD 1.1 xs:assert
的新手,当我尝试使用 XSD:
验证 XML 时出现错误
Assertion evaluation (MsgId eq 'ABC'
) for element GrpHdr
on schema type GroupHeader32
did not succeed.
XSD
抱歉没有放完整的XSD,只放了一部分:
<xs:schema attributeFormDefault="unqualified" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"
xmlns:xerces="http://xerces.apache.org"> <xs:element name="Document" type="Document"/>
<xs:complexType name="Document">
<xs:sequence>
<xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV03"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CustomerCreditTransferInitiationV03">
<xs:sequence>
<xs:element name="GrpHdr" type="GroupHeader32"/>
<xs:element maxOccurs="unbounded" minOccurs="1" name="PmtInf" type="PaymentInstructionInformation3"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GroupHeader32">
<xs:sequence>
<xs:element name="MsgId" type="Max35Text"/>
<xs:element name="CreDtTm" type="ISODateTime"/>
<xs:element maxOccurs="2" minOccurs="0" name="Authstn" type="Authorisation1Choice"/>
<xs:element name="NbOfTxs" type="Max15NumericText"/>
<xs:element maxOccurs="1" minOccurs="0" name="CtrlSum" type="DecimalNumber"/>
<xs:element name="InitgPty" type="PartyIdentification32"/>
<xs:element maxOccurs="1" minOccurs="0" name="FwdgAgt" type="BranchAndFinancialInstitutionIdentification4"/>
</xs:sequence>
<xs:assert test="MsgId eq 'ABC'"/>
</xs:complexType>
</xs:schema>
这是放置 xs:assert
条件以检查元素 MsgID
的值等于 ABC 的正确位置吗?
我正在使用 oXygen XML 软件进行验证。
样本XML
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>ABC</MsgId>
<CreDtTm>2009-02-17T12:49:35</CreDtTm>
<NbOfTxs>1</NbOfTxs>
</GrpHdr>
</CstmrCdtTrfInitn>
您有几个命名空间问题:
- 您的 XML 不在您的 XSD 的目标命名空间中。
- 你的断言测试在没有命名空间中引用
MsgId
,尽管它在目标命名空间中。
这是一个完整的工作示例 XML 和一个 XSD 使用(已修复的)示例断言成功验证它的示例:
XML
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>ABC</MsgId>
<CreDtTm>2009-02-17T12:49:35</CreDtTm>
<NbOfTxs>1</NbOfTxs>
</GrpHdr>
</CstmrCdtTrfInitn>
</Document>
XSD
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns:pa="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="Document" type="Document"/>
<xs:complexType name="Document">
<xs:sequence>
<xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV03"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CustomerCreditTransferInitiationV03">
<xs:sequence>
<xs:element name="GrpHdr" type="GroupHeader32"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GroupHeader32">
<xs:sequence>
<xs:element name="MsgId" type="xs:string"/>
<xs:element name="CreDtTm" type="xs:string"/>
<xs:element maxOccurs="2" minOccurs="0" name="Authstn" type="xs:string"/>
<xs:element name="NbOfTxs" type="xs:string"/>
</xs:sequence>
<xs:assert test="pa:MsgId eq 'ABC'"/>
</xs:complexType>
</xs:schema>
我是 XSD 1.1 xs:assert
的新手,当我尝试使用 XSD:
Assertion evaluation (
MsgId eq 'ABC'
) for elementGrpHdr
on schema typeGroupHeader32
did not succeed.
XSD
抱歉没有放完整的XSD,只放了一部分:
<xs:schema attributeFormDefault="unqualified" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"
xmlns:xerces="http://xerces.apache.org"> <xs:element name="Document" type="Document"/>
<xs:complexType name="Document">
<xs:sequence>
<xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV03"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CustomerCreditTransferInitiationV03">
<xs:sequence>
<xs:element name="GrpHdr" type="GroupHeader32"/>
<xs:element maxOccurs="unbounded" minOccurs="1" name="PmtInf" type="PaymentInstructionInformation3"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GroupHeader32">
<xs:sequence>
<xs:element name="MsgId" type="Max35Text"/>
<xs:element name="CreDtTm" type="ISODateTime"/>
<xs:element maxOccurs="2" minOccurs="0" name="Authstn" type="Authorisation1Choice"/>
<xs:element name="NbOfTxs" type="Max15NumericText"/>
<xs:element maxOccurs="1" minOccurs="0" name="CtrlSum" type="DecimalNumber"/>
<xs:element name="InitgPty" type="PartyIdentification32"/>
<xs:element maxOccurs="1" minOccurs="0" name="FwdgAgt" type="BranchAndFinancialInstitutionIdentification4"/>
</xs:sequence>
<xs:assert test="MsgId eq 'ABC'"/>
</xs:complexType>
</xs:schema>
这是放置 xs:assert
条件以检查元素 MsgID
的值等于 ABC 的正确位置吗?
我正在使用 oXygen XML 软件进行验证。
样本XML
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>ABC</MsgId>
<CreDtTm>2009-02-17T12:49:35</CreDtTm>
<NbOfTxs>1</NbOfTxs>
</GrpHdr>
</CstmrCdtTrfInitn>
您有几个命名空间问题:
- 您的 XML 不在您的 XSD 的目标命名空间中。
- 你的断言测试在没有命名空间中引用
MsgId
,尽管它在目标命名空间中。
这是一个完整的工作示例 XML 和一个 XSD 使用(已修复的)示例断言成功验证它的示例:
XML
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>ABC</MsgId>
<CreDtTm>2009-02-17T12:49:35</CreDtTm>
<NbOfTxs>1</NbOfTxs>
</GrpHdr>
</CstmrCdtTrfInitn>
</Document>
XSD
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns:pa="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="Document" type="Document"/>
<xs:complexType name="Document">
<xs:sequence>
<xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV03"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CustomerCreditTransferInitiationV03">
<xs:sequence>
<xs:element name="GrpHdr" type="GroupHeader32"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GroupHeader32">
<xs:sequence>
<xs:element name="MsgId" type="xs:string"/>
<xs:element name="CreDtTm" type="xs:string"/>
<xs:element maxOccurs="2" minOccurs="0" name="Authstn" type="xs:string"/>
<xs:element name="NbOfTxs" type="xs:string"/>
</xs:sequence>
<xs:assert test="pa:MsgId eq 'ABC'"/>
</xs:complexType>
</xs:schema>