我的xml文件为
<?xml version="1.0" encoding="ISO-8859-1"?>
<Info>
<Pan>123</Pan>
<Name>qwe</Name>
<Email>qwe</Email>
<City>qwe</City>
<State>qwe</State>
<AssessmentYear>2012</AssessmentYear>
<MobileNo>1234</MobileNo>
<Income-Salary>1234</Income-Salary>
<Income-Other>1234</Income-Other>
<TotalAmount>122</TotalAmount>
<Signature>
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116"><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
Pan : <xsl:copy-of select="//Pan"/>
MobileNo : <xsl:copy-of select="//MobileNo"/>
TotalAmount : <xsl:copy-of select="//TotalAmount"/>
</xsl:template>
</xsl:stylesheet></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>FgbIIimTLIbd0Zpvq1zDrZse6aJg5bAE1/Q58cEkEvk=</DigestValue></Reference>
</SignedInfo>
<SignatureValue>dy4QDco5NhXResncu0tUG5ylujDn9siIQSHjuX5HxH2gs70LpsO3KDWNvDXjpgkIySYfzJ/FdC6C
trkSySWRjhObqI8cbcP5VU/nL8pP21+3CO+gF1k884aeX3felpRy0FBBMTYBknQTunWCHvpHk927
ZHGvm6Hiej7iBKr3e1k=</SignatureValue>
</Signature>
</Info>
此xml文件的我的架构文件如下( c1.xsd )
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="C:\\xml\\c2.xsd"/>
<xs:element name="Info">
<xs:complexType>
<xs:sequence>
<xs:element name="Pan" type="xs:string"/>
<xs:element name="Name" type="xs:string"/>
<xs:element name="Email" type="xs:string"/>
<xs:element name="City" type="xs:string"/>
<xs:element name="State" type="xs:string"/>
<xs:element name="AssessmentYear" type="xs:gYear"/>
<xs:element name="MobileNo" type="xs:unsignedLong"/>
<xs:element name="Income-Salary" type="xs:unsignedLong"/>
<xs:element name="Income-Other" type="xs:unsignedLong"/>
<xs:element name="TotalAmount" type="xs:unsignedLong"/>
<xs:element ref="ds:Signature"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
c2.xsd(编者)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2000/09/xmldsig#">
<xs:element name="Signature">
<xs:complexType>
<xs:sequence>
<xs:element name="SignedInfo">
<xs:complexType>
<xs:sequence>
<xs:element name="CanonicalizationMethod">
<xs:complexType>
<xs:attribute name="Algorithm" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="SignatureMethod">
<xs:complexType>
<xs:attribute name="Algorithm" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Reference">
<xs:complexType>
<xs:attribute name="URI" type="xs:string"/>
<xs:all>
<xs:element name="Transforms">
<xs:complexType>
<xs:sequence>
<xs:element name="Transform" type="xs:string">
<xs:complexType>
<xs:attribute name="Algorithm" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DigestMethod">
<xs:complexType>
<xs:attribute name="Algorithm" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="DigestValue" type="xs:hexBinary"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SignatureValue" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
当我验证我的xml文件时,我得到以下异常
org.xml.sax.SAXParseException; systemId: file:/C://xml//c2.xsd; lineNumber: 22;
columnNumber: 37; s4s-elt-invalid-content.1: The content of '#AnonType_Reference
SignedInfoSignature' is invalid. Element 'element' is invalid, misplaced, or oc
curs too often.
我无法弄清楚我哪里出错了?任何人都可以告诉我代码中的错误究竟在哪里吗?
编辑1后错误
org.xml.sax.SAXParseException; systemId: file:/C://xml//c2.xsd; lineNumber: 22;
columnNumber: 15; s4s-elt-invalid-content.1: The content of '#AnonType_Reference
SignedInfoSignature' is invalid. Element 'all' is invalid, misplaced, or occurs
too often.
答案 0 :(得分:2)
在c2.xsd,第22行
<xs:complexType>
<xs:attribute name="URI" type="xs:string"/>
<xs:element name="Transforms">
xs:element
无法显示为xs:complexType
的直接子女。它必须位于xs:all
,xs:choice
或xs:sequence
内。
答案 1 :(得分:1)
我试用了你的文件并设法让它来验证记事本++做了几件事:
注意xsd和xml我在下面的notepad ++中成功验证了。
XSD:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" attributeFormDefault="unqualified">
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
<xs:element name="Info">
<xs:complexType>
<xs:sequence>
<xs:element name="Pan" type="xs:string"/>
<xs:element name="Name" type="xs:string"/>
<xs:element name="Email" type="xs:string"/>
<xs:element name="City" type="xs:string"/>
<xs:element name="State" type="xs:string"/>
<xs:element name="AssessmentYear" type="xs:gYear"/>
<xs:element name="MobileNo" type="xs:unsignedLong"/>
<xs:element name="Income-Salary" type="xs:unsignedLong"/>
<xs:element name="Income-Other" type="xs:unsignedLong"/>
<xs:element name="TotalAmount" type="xs:unsignedLong"/>
<xs:element ref="dsig:Signature" minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
和XML:
<?xml version="1.0" ?>
<Info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<Pan>123</Pan>
<Name>qwe</Name>
<Email>qwe</Email>
<City>qwe</City>
<State>qwe</State>
<AssessmentYear>2012</AssessmentYear>
<MobileNo>1234</MobileNo>
<Income-Salary>1234</Income-Salary>
<Income-Other>1234</Income-Other>
<TotalAmount>122</TotalAmount>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
Pan : <xsl:copy-of select="//Pan"/>
MobileNo : <xsl:copy-of select="//MobileNo"/>
TotalAmount : <xsl:copy-of select="//TotalAmount"/>
</xsl:template>
</xsl:stylesheet>
</Transform>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>FgbIIimTLIbd0Zpvq1zDrZse6aJg5bAE1/Q58cEkEvk=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>dy4QDco5NhXResncu0tUG5ylujDn9siIQSHjuX5HxH2gs70LpsO3KDWNvDXjpgkIySYfzJ/FdC6C
trkSySWRjhObqI8cbcP5VU/nL8pP21+3CO+gF1k884aeX3felpRy0FBBMTYBknQTunWCHvpHk927
ZHGvm6Hiej7iBKr3e1k=</SignatureValue>
</Signature>
</Info>
答案 2 :(得分:0)
您的c2.xsd仍然无效,请查看ComplexType定义:
<complexType
id=ID
name=NCName
abstract=true|false
mixed=true|false
block=(#all|list of (extension|restriction))
final=(#all|list of (extension|restriction))
any attributes
>
(annotation?,(simpleContent|complexContent|((group|all|
choice|sequence)?,((attribute|attributeGroup)*,anyAttribute?))))
</complexType>
必须在group,all,choice或sequence元素之后定义属性,因此在<xs:element name="Reference">
中更改顺序以便先定义<xs:all>
然后<xs:attribute>
:
<xs:element name="Reference">
<xs:complexType>
<xs:all>
<xs:element name="Transforms">
<xs:complexType>
<xs:sequence>
<xs:element name="Transform" type="xs:string">
<xs:complexType>
<xs:attribute name="Algorithm" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DigestMethod">
<xs:complexType>
<xs:attribute name="Algorithm" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="DigestValue" type="xs:hexBinary"/>
</xs:all>
<xs:attribute name="URI" type="xs:string"/>
</xs:complexType>
</xs:element>