在xmlns中更改每个元素的xmlns值

时间:2016-08-08 06:28:28

标签: xml xsd

我想问一下如何将xmlns属性添加到xsd上的元素。

输出应该与此类似:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<asn>
    <itemcode id="ITM0002212">
        <serialno xmlns="1231123321231600000">
            <msn/>
            <msisdn>123456789</msisdn>
        </serialno>             
        <serialno xmlns="1231123321231700000">
            <msn/>
            <msisdn>123456788</msisdn>
        </serialno>
        <serialno xmlns="1231123321231800000">
            <msn/>
            <msisdn>123456787</msisdn>
        </serialno>
        <serialno xmlns="1231123321231900000">
            <msn/>
            <msisdn>123456786</msisdn>
        </serialno>
    </itemcode>
</asn>

我尝试使用下面的xsd但应用程序不允许属性xmlns:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="asn">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="itemcode">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="serialno">
                            <xs:complexType>
                                <xs:sequence>
                                    <element name="nac" type="xs:string" />
                                    <element name="msisdn" type="xs:string" />
                                </xs:sequence>
                                <attribute name="xmlns" type="xs:string"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:string"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

谢谢, 莱恩

1 个答案:

答案 0 :(得分:0)

xmlns属性不是真正的属性。它们由XML解析器解析,以声明serialnomsnmsisdn存在的默认命名空间。因此,XML Schema实际上并不以属性的形式看到它们。通常,XML禁止并保留以xml开头的任何案例组合的属性名称。

但是,查看提供的XML文档,与xmlns关联的值看起来不像URI引用,并且每个serialno都有自己的xmlns值,这种情况并不常见:必须为这些命名空间中的每一个提供单独的模式文件。这可能会指出这些字段或应该是id字段或自定义字段而不是xmlns字段。