XSD:根据名称验证子节点并接受以下所有内容
XSD: Validate a subnode based on its name and accept everything below
在 XML 文件中,我有一个特定的节点,我希望它出现,但不验证其任何内容(子元素和属性)。
输入XML
<?xml version="1.0" encoding="utf-8" ?>
<RootContainer xmlns="MyNamespace">
<ElementA/>
<ElementB/>
<ElementC/>
<OtherElement SomeAttribute="Value">
<SubElementX/>
<SubElementY/>
</OtherElement>
</RootContainer>
XSD 用于验证
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="MyNamespace"
elementFormDefault="qualified"
xmlns="MyNamespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="RootContainer">
<xs:complexType>
<xs:sequence>
<xs:element name ="ElementA"/>
<xs:element name ="ElementB"/>
<xs:element name ="ElementC"/>
<xs:element name="OtherElement" minOccurs="0" maxOccurs="1" >
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
但是我遇到了几个错误(使用 .Net,也使用 Notepad++(使用 Xml 插件)):
使用 XML 模式验证当前文件:
Notepad++ 错误:
ERROR: Element '{MyNamespace}OtherElement', attribute 'SomeAttribute': No matching global attribute declaration available, but demanded by the strict wildcard.
ERROR: Element '{MyNamespace}SubElementX': No matching global element declaration available, but demanded by the strict wildcard.
ERROR: Element '{MyNamespace}SubElementY': No matching global element declaration available, but demanded by the strict
.网络错误:
The 'SomeAttribute' attribute is not declared.
The 'MyNamespace:SubElementX' element is not declared.
The 'MyNamespace:SubElementY' element is not declared.
为什么?我是不是误解了 xs:any
和 xs:anyAttribute
?
您可以为此使用 anyType:
<xs:element name="OtherElement" type="xs:anyType" minOccurs="0" maxOccurs="1" />
在 XML 文件中,我有一个特定的节点,我希望它出现,但不验证其任何内容(子元素和属性)。
输入XML
<?xml version="1.0" encoding="utf-8" ?>
<RootContainer xmlns="MyNamespace">
<ElementA/>
<ElementB/>
<ElementC/>
<OtherElement SomeAttribute="Value">
<SubElementX/>
<SubElementY/>
</OtherElement>
</RootContainer>
XSD 用于验证
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="MyNamespace"
elementFormDefault="qualified"
xmlns="MyNamespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="RootContainer">
<xs:complexType>
<xs:sequence>
<xs:element name ="ElementA"/>
<xs:element name ="ElementB"/>
<xs:element name ="ElementC"/>
<xs:element name="OtherElement" minOccurs="0" maxOccurs="1" >
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
但是我遇到了几个错误(使用 .Net,也使用 Notepad++(使用 Xml 插件)): 使用 XML 模式验证当前文件:
Notepad++ 错误:
ERROR: Element '{MyNamespace}OtherElement', attribute 'SomeAttribute': No matching global attribute declaration available, but demanded by the strict wildcard.
ERROR: Element '{MyNamespace}SubElementX': No matching global element declaration available, but demanded by the strict wildcard.
ERROR: Element '{MyNamespace}SubElementY': No matching global element declaration available, but demanded by the strict
.网络错误:
The 'SomeAttribute' attribute is not declared.
The 'MyNamespace:SubElementX' element is not declared.
The 'MyNamespace:SubElementY' element is not declared.
为什么?我是不是误解了 xs:any
和 xs:anyAttribute
?
您可以为此使用 anyType:
<xs:element name="OtherElement" type="xs:anyType" minOccurs="0" maxOccurs="1" />