如何用 XOR 定义 dtd 元素

How to define dtd element with XOR

我有一个 xml 元素 vehicle 可以作为子元素 car XOR truck XOR 多个#PCDATA OR bus 的组合。如何编写dtd?

<?xml version="1.0" encoding="UTF-8" ?>
    <!ELEMENT root (vehicle)*>
    <!ELEMENT vehicle (truck|car|(#PCDATA|bus)*)>

以上失败并出现错误

parser error : ContentDecl : Name or '(' expected

在 XML 中不可能。一旦您需要定义允许文本 (#PCDATA) 和元素的内容模型 - 也称为 mixed content - ,您必须 定义它那样 :

(#PCDATA | element1 | element2 | ...)*

针对您的情况的解决方法可能是:

<!ELEMENT vehicle (truck|car|buscontent)>
<!ELEMENT buscontent (#PCDATA | bus)* >