如果指定了xsi:schemaLocation,则不使用Visual Studio的架构缓存

时间:2019-03-01 17:25:58

标签: xml visual-studio xsd

成功配置Visual Studio(2017 CE)架构缓存(catalog.xml,将名称空间解析为xsd后。.

.. Xml文档中额外存在xsi:schemaLocation标记将阻止使用缓存。看起来schemaLocation优先于模式缓存,但是如果/在本地未找到xsd时,解析将被简单中止,甚至不使用缓存。

enter image description here

在catalog.xml中

<SchemaCatalog xmlns="http://schemas.microsoft.com/xsd/catalog">
  <Catalog href="file://d:/work/test/schemas/cat2.xml"/>

cat2.xml

<?xml version="1.0" encoding="utf-8"?>
<SchemaCatalog xmlns="http://schemas.microsoft.com/xsd/catalog">
  <Schema href="file:///D:/work/test/test.xsd" targetNamespace="http://test.org/schema/r1.0"     />
</SchemaCatalog>

test.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://test.org/schema/r1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="test">
    <xs:complexType>
      <xs:sequence>
        <xs:choice maxOccurs="unbounded">
          <xs:element name="a" type="xs:string" />
          <xs:element name="b">
            <xs:complexType>
              <xs:simpleContent>
                <xs:extension base="xs:string">
                  <xs:attribute name="myattr" type="xs:unsignedByte" use="required" />
                </xs:extension>
              </xs:simpleContent>
            </xs:complexType>
          </xs:element>
          <xs:element name="d" />
          <xs:element name="c" />
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

All works well.. the schema is picked up from cat2.xsd

But if the xml contains an explicit schemaLocation tag then the xsd is no longer applied.

现在,它在与test.xml相同的文件夹中找不到test.xsd之后就放弃了(不再生成错误,不应用模式)

对此是否有任何修复或解决方法?我有一个大型项目,在许多文件夹中都有许多xml文件,并且不能删除schemaLocation标记,因为在问题域中已指定了该标记。

TIA, 邓肯

0 个答案:

没有答案