0

这是一个 xml 示例,我希望能够使用我的自制模式进行验证。整个EncryptedData部分实际上是 XML 加密规范的语法。

<?xml version="1.0" encoding="UTF-8"?>
<Foo xmlns="http://www.foo.org/FOO">
    <EncryptedData>
        <EncryptionMethod
            Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:KeyName>John Smith</ds:KeyName>
        </ds:KeyInfo>
        <CipherData>
            <CipherValue>DEADBEEF</CipherValue>
        </CipherData>
    </EncryptedData>
</Foo>

所以我尝试从 XML Encryption 派生并想出了这个:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xenc='http://www.w3.org/2001/04/xmlenc#'
    xmlns:xenc11="http://www.w3.org/2009/xmlenc11#"
    xmlns:foo="http://www.foo.org/Foo"
    targetNamespace="http://www.foo.org/Foo">
    <xsd:import namespace='http://www.w3.org/2001/04/xmlenc#' />
    <xsd:import namespace='http://www.w3.org/2009/xmlenc11#' />
    <xsd:element name="Foo">
        <xsd:complexType>
            <xsd:choice>
                <xsd:element name="myItem" minOccurs="1" maxOccurs="unbounded" type="anyType"/>
                <xsd:element ref="xenc:EncryptedData" minOccurs="1"
                    maxOccurs="unbounded" />
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

但是我的实际 xml 必须看起来像这样。我需要在导入所有 XML 加密元素时为它们添加名称空间的前缀。

<?xml version="1.0" encoding="UTF-8"?>
<foo
    xmlns="http://www.foo.org/Foo"
    xmlns:xenc='http://www.w3.org/2001/04/xmlenc#'/>
    <xenc:EncryptedData>
        <xenc:EncryptionMethod
            Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:KeyName>John Smith</ds:KeyName>
        </ds:KeyInfo>
        <xenc:CipherData>
            <xenc:CipherValue>DEADBEEF</xenc:CipherValue>
        </xenc:CipherData>
    </xenc:EncryptedData>
</foo>

但是我也没有真正将导入更改为包含,因为目标名称空间不同。(我自己与 xml 加密模式中定义的不同)有没有办法做到这一点,这样你甚至可以在没有命名空间的情况下使用它?或者它只适用于前缀?

4

1 回答 1

1

您可以更改根元素中的默认命名空间

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Liquid XML 2014 Developer Bundle Edition 12.1.2.5004 (http://www.liquid-technologies.com) -->
<fns:foo xmlns:fns="http://www.foo.org/Foo"
         xmlns='http://www.w3.org/2001/04/xmlenc#'>
    <EncryptedData>
        <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:KeyName>John Smith</ds:KeyName>
        </ds:KeyInfo>
        <CipherData>
            <CipherValue>DEADBEEF</CipherValue>
        </CipherData>
    </EncryptedData>
</fns:foo>

或者您可以多次更改默认元素,删除所有前缀

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Liquid XML 2014 Developer Bundle Edition 12.1.2.5004 (http://www.liquid-technologies.com) -->
<foo xmlns="http://www.foo.org/Foo">
    <EncryptedData xmlns='http://www.w3.org/2001/04/xmlenc#'>
        <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
        <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <KeyName>John Smith</KeyName>
        </KeyInfo>
        <CipherData>
            <CipherValue>DEADBEEF</CipherValue>
        </CipherData>
    </EncryptedData>
</foo>
于 2014-08-20T06:59:47.477 回答