Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用实体重用属性声明_Java_Xml_Dtd - Fatal编程技术网

Java 使用实体重用属性声明

Java 使用实体重用属性声明,java,xml,dtd,Java,Xml,Dtd,dtd的以下部分无效/正在工作: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE root [ <!ELEMENT root (height)> <!ENTITY % objectPropAttr "min CDATA #REQUIRED max CDATA #REQUIRED"> <!ELEMENT height EMPTY> <!ATTLIST height %objectPr

dtd的以下部分无效/正在工作:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ELEMENT root (height)>
<!ENTITY % objectPropAttr
 "min CDATA #REQUIRED
  max CDATA #REQUIRED">
<!ELEMENT height EMPTY>
<!ATTLIST height %objectPropAttr;>
]>
<!-- xml can be left out, since parser never reaches it -->
<root>
    <height min="1" max="5"/>
</root>
错误消息:


必须在元素“高度”的属性列表声明中提供AttributeName。问题中的DTD仅包含一个。这意味着您不能将参数实体引用用作标记声明的一部分

它在XML 1.0建议中指定:

注释XML规范中的这一注释清楚地解释了这一点:


实体在外部子集(单独的文件)中使用时工作正常。以下XML文件(root.XML)


以及下面的DTD(root.DTD)


使用以下工具处理时生成此输出:

$xmllint--postvalid root.xml
root.xml:3:元素高度:有效性错误:元素高度不包含属性max
文档root.xml未验证

这是意料之中的。如果将
max
属性添加到XML文档中,验证将成功。

我正在使用java读取文件。所有在线验证器也会在这个位置抛出类似的信息。如何重现这个问题?“我正在使用java”的信息太少。它通过用代码更新问题来验证。感谢您花时间,但我看不出您的“用例”与dtd验证错误有何关联。甚至没有提供xml用例,也没有必要,因为dtd本身无效。由于示例中需要
max
,因此错误消息是可预测的。我创建了一个完整的xml文件,包括dtd(以及不必要的xml实例)并编辑了我的问题。
final File file = new File("file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setValidating(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
dBuilder.parse(file);
<!DOCTYPE root SYSTEM "root.dtd">
<root>
  <height min="1"/>
</root>
<!ELEMENT root (height+)>

<!ENTITY % objectPropAttr
 "min CDATA #REQUIRED
  max CDATA #REQUIRED">

<!ELEMENT height EMPTY>
<!ATTLIST height %objectPropAttr;>
$ xmllint --postvalid root.xml
<?xml version="1.0"?>
<!DOCTYPE root SYSTEM "root.dtd">
<root>
  <height min="1"/>
</root>
root.xml:3: element height: validity error : Element height does not carry attribute max
Document root.xml does not validate