Xml 找不到元素';作业';
所以我从XML和模式开始,今天我遇到了这个问题,但我还没有弄明白 我得到了一个错误,它说 第5列第2列:找不到 元素“赋值”的声明 我相信我已经声明了元素,但也许我遗漏了一些东西,并且没有 这是我的XML文件:Xml 找不到元素';作业';,xml,schema,Xml,Schema,所以我从XML和模式开始,今天我遇到了这个问题,但我还没有弄明白 我得到了一个错误,它说 第5列第2列:找不到 元素“赋值”的声明 我相信我已经声明了元素,但也许我遗漏了一些东西,并且没有 这是我的XML文件: <?xml version="1.0" encoding="UTF-8"?> <assignments xmlns="http://www.w3.org/2001/XMLSchema-instance" SchemaLocation="A3.xsd" &
<?xml version="1.0" encoding="UTF-8"?>
<assignments
xmlns="http://www.w3.org/2001/XMLSchema-instance"
SchemaLocation="A3.xsd"
>
<assignment id="a1">
<name>Schemas</name>
<page>110</page>
</assignment>
<assignment id="a2">
<name>Namespaces</name>
<page>258</page>
<files>names.xml</files>
<files>names.dtd</files>
</assignment>
<assignment id="a3">
<name>RELAX NG</name>
<page>305</page>
<files>account.xml</files>
<files>customers.xml</files>
<files>finance.xsd</files>
</assignment>
</assignments>
模式
110
名称空间
258
names.xml
names.dtd
放松
305
account.xml
customers.xml
finance.xsd
这是我的架构文件:
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.levijackson.net/web340/ns"
targetNamespace="http://www.levijackson.net/web340/ns" elementFormDefault="qualified"
>
<element name="assignments" type="target:TypeAssignments"></element>
<complexType name="TypeAssignments">
<sequence>
<element name="assignment" type="target:assignmentInfo"></element>
</sequence>
<attribute name="id" type="string" use="required"/>
</complexType>
<complexType name="assignmentInfo">
<sequence>
<element name="name" type="string"></element>
<element name="page" type="target:TypePage"></element>
<element name="file" type="target:TypeFile" minOccurs="0" maxOccurs="unbounded"></element>
</sequence>
</complexType>
<simpleType name="TypePage">
<restriction base="integer">
<minInclusive value="50" />
<maxInclusive value="498" />
</restriction>
</simpleType>
<simpleType name="TypeFile">
<restriction base="string">
<enumeration value=".xml" />
<enumeration value=".dtd" />
<enumeration value=".xsd" />
</restriction>
</simpleType>
</schema>
<element name="assignment" type="target:assignmentInfo" minOccurs="0" maxOccurs="unbounded"></element>
由于我还在学习,请随意指出我可能犯的与问题无关的任何其他错误
谢谢Levi尝试以下方法。我去掉了schema元素的一些额外细节,但稍作调整,如下所示应该可以工作:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="assignments" type="TypeAssignments" />
<xs:complexType name="TypeAssignments">
<xs:sequence>
<xs:element name="assignment" type="assignmentInfo"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="assignmentInfo">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="page" type="TypePage" />
<xs:element name="files" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
<xs:simpleType name="TypePage">
<xs:restriction base="xs:integer">
<xs:minInclusive value="50" />
<xs:maxInclusive value="498" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TypeFile">
<xs:restriction base="xs:string">
<xs:enumeration value=".xml" />
<xs:enumeration value=".dtd" />
<xs:enumeration value=".xsd" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
注释:
TypeAssignments
移动到assignmentInfo
xs
总而言之,我并没有对所有内容进行太多修改,所以您的想法是正确的。在您的实例文档中,如上所述,您在
上定义了xmlns
属性
但是,架构文档指定的targetNamespace
值为“”。由于实例文档中的元素没有此命名空间,因此验证失败
首先将实例文档更改为如下所示:
<assignments
xmlns="http://www.levijackson.net/web340/ns"
这个问题的解决方案是,我没有将我的主元素“assignments”声明为复杂元素,实际上我根本没有将它声明为任何东西
因此,通过从我的模式文件中获取这一行:
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.levijackson.net/web340/ns"
targetNamespace="http://www.levijackson.net/web340/ns" elementFormDefault="qualified"
>
<element name="assignments" type="target:TypeAssignments"></element>
<complexType name="TypeAssignments">
<sequence>
<element name="assignment" type="target:assignmentInfo"></element>
</sequence>
<attribute name="id" type="string" use="required"/>
</complexType>
<complexType name="assignmentInfo">
<sequence>
<element name="name" type="string"></element>
<element name="page" type="target:TypePage"></element>
<element name="file" type="target:TypeFile" minOccurs="0" maxOccurs="unbounded"></element>
</sequence>
</complexType>
<simpleType name="TypePage">
<restriction base="integer">
<minInclusive value="50" />
<maxInclusive value="498" />
</restriction>
</simpleType>
<simpleType name="TypeFile">
<restriction base="string">
<enumeration value=".xml" />
<enumeration value=".dtd" />
<enumeration value=".xsd" />
</restriction>
</simpleType>
</schema>
<element name="assignment" type="target:assignmentInfo" minOccurs="0" maxOccurs="unbounded"></element>
并将其改为:
<element name="assignments">
<complexType>
<sequence>
<element name="assignment" type="target:assignmentInfo" minOccurs="0" maxOccurs="unbounded"></element>
</sequence>
</complexType>
</element>
元素定义正确,感谢大家的帮助
Levi您不应该将其指定为默认名称空间,因为这样它会被视为XML中所有未明确指定名称空间的元素的名称空间。请将其指定给其他名称空间,如常用的xmlns:xsi。如果这样设置,是否需要指定如下元素类型:type=”xsi:string?是的。顺便说一句,在XSD模式中,通常使用xs,而在XML文件中使用xsi。我理解为什么使用xs:prefix作为名称空间。对我来说,将名称空间声明为在XML文件中使用是否更容易,这样我就不必在模式中的所有元素前面加上xs:?因此,如果我说“>不幸的是,您需要使用xs作为元素的前缀,因为类型(例如,字符串、元素、枚举等)被定义为单独模式的一部分。如果在模式的顶部我声明而不是仅仅说,那么这将成为页面的默认模式吗?对于我的其他元素,我会在开始标记中指定另一个模式,如so:xmlns:target=“”targetNamespace=“”elementFormDefault=“qualified”,然后对我创建的属性值使用target:assignmentInfo等。我尝试了这一点,通过将顶级xmlns:xs=“…”属性设置为xmlns=“…”它似乎可以工作,但在引用目标名称空间时,它会变得混乱。我不确定您告诉我应该做什么,您粘贴的内容就是我上面的内容。此外,targetNamespace引用的是我在其正上方声明的第二个命名空间。除非我误解了targetNamespace的工作原理。