用Schema对xml文件进行校验,xml文件根节点的xmlns必须跟xsd文件根节点的targetNamespace的值一样(比如下面的http://www.w3school.cn),否则校验失败,真恼火我只想校验各个节点,xmlns是xml文件的命名空间,是制作xml文件的人取名的,我没法预知,也不想限定。哪位高手处理过这种事情呢? 还请赐教。-----------------------xml文件------------------------
<?xml version="1.0"?> 
<note xmlns="http://www.w3school.cn"> 
    <to>George</to> 
    <from>John</from> 
    <heading>Reminder</heading> 
    <body>Don't forget the meeting this weekend!</body> 
</note>-----------------------xsd文件------------------------
<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           targetNamespace="http://www.w3school.cn" 
           elementFormDefault="qualified">     <xs:element name="note"> 
        <xs:complexType> 
            <xs:sequence> 
                <xs:element name="to" type="xs:string"/> 
                <xs:element name="from" type="xs:string"/> 
                <xs:element name="heading" type="xs:string"/> 
                <xs:element name="body" type="xs:string"/> 
            </xs:sequence> 
        </xs:complexType> 
    </xs:element> </xs:schema>

解决方案 »

  1.   

    如果XML文件不能改的话,
    你只能修改xsd文件,将  
    targetNamespace="http://www.w3school.cn"
    这一行去掉。  
      

  2.   

    或者改成和XML文件中的xmlns一样,呵呵。
      

  3.   

    如果把targetNamespace="http://www.w3school.cn"
    这一行去掉,那么xml文件中就不能有xmlns了,否则验证同样失败,我不不需要也不能做这个限定。
      

  4.   


    这是不可能的,xml文件不是我做的,是客户做的,不同的厂商会有不同的xmlns,我没法限定。
      

  5.   

    上面的这个Schema文件貌似有点问题
    <xs:element name="note">   怎么没有定义类型
      

  6.   

    老兄,我说的是将XSD文件中的targetNamespace改成和客户提供的XML文件中的一致。
    你在手上放几个XSD文件版本,不同的XSD文件针对不同的客户使用。
      

  7.   


    楼上的大哥,主要问题是targetNamespace没法和客户提供的XML文件中的一致,这个客户范围很大,各自有自己的规范,能约束就不用在这里发帖了。