这是我的问题: 我有一个xml文件,其中包含一些值,此文件也是证书签名。 我的xsd模式文件知道如何只处理值,而在添加签名行时,模式失败。 错误是: 元素“标题”在名称空间“http://www.w3.org/2000/09/xmldsig#”中具有无效的子元素“签名”。可能的元素列表'签名' 这是我的代码, 谢谢:))
文件test.xml:
<Header>
<tank>
<code>1</code>
<level>0</level>
</tank>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
...
<SignedInfo>
</Signature>
</Header>
SchemaTest.xsd:
<?xml version="1.0"?>
<xs:schema id="SchemaTest"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefalut="qualified"
attributeFormDefault="unqualified">
<xs:element name="Header">
<xs:complexType>
<xs:sequence>
<xs:element name="tank">
<xs:complexType>
<xs:sequence>
<xs:element name="code"/>
<xs:element name="level"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Signature">
<xs:complexType>
<xs:sequence>
<xs:element name="SignedInfo">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 0 :(得分:1)
您需要第二个架构来描述Signature命名空间。以下代码基于两个不同的命名空间为xml文件构建了一个简单示例。
这是第二个命名空间架构......
<?xml version="1.0" encoding="UTF-8"?>
<!-- second namespace schema -->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://my.second.namespace"
xmlns:tns="http://my.second.namespace"
elementFormDefault="qualified">
<element name="SomethingElse" type="string"></element>
</schema>
主命名空间的架构......
<?xml version="1.0" encoding="UTF-8"?>
<!-- first namespace schema -->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://my.first.namespace" xmlns:tns="http://my.first.namespace"
xmlns:S="http://my.first.namespace"
xmlns:T="http://my.second.namespace"
elementFormDefault="qualified">
<import namespace="http://my.second.namespace"
schemaLocation="./SecondNamespaceSchema.xsd"/>
<element name="Root">
<complexType>
<sequence>
<element name="Head">
<complexType>
<sequence>
<element name="Something" type="string"></element>
<element ref="T:SomethingElse"/>
</sequence>
</complexType>
</element>
<element name="Body" type="string"></element>
</sequence>
</complexType>
</element>
</schema>
...以及将所有内容放在一起的示例xml。
<?xml version="1.0"?>
<!-- validatable xml file - proved with eclipse validator -->
<S:Root xmlns:S="http://my.first.namespace"
xmlns:T="http://my.second.namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://my.first.namespace ./Sample.xsd">
<S:Head>
<S:Something/>
<T:SomethingElse/>
</S:Head>
<S:Body>
</S:Body>
</S:Root>