xml - DTD 语法 - 允许子元素 OR pcdata

标签 xml dtd pcdata

我的 .xml 结构可能包含以下数据:

<entry id="one-string">
            <class>nmWinMultiReports_main</class>
            <classParams>string</classParams>
         </entry>
<entry id="multiple-elements">
            <class>nmJavaScript_main</class>
            <classParams>
               <pluginid>monitorPlugin</pluginid>
               <bla>string</bla>
               <tag>abc</tag>
            </classParams>
         </entry>

如何定义 .dtd 文件以允许 classParams 1. 为字符串或 2. 多个子元素(每个元素一次)?

我尝试过:

<!ELEMENT class ( #PCDATA ) >
<!ELEMENT classParams ( #PCDATA | pluginid | bla | tag ) >
         <!ELEMENT pluginid ( #PCDATA ) >
         <!ELEMENT bla ( #PCDATA ) >
         <!ELEMENT tag ( #PCDATA ) >

最佳答案

DTD 无法强制执行您所描述的约束;获得类似约束的最简单方法是添加一个新元素(称为 string)并将 classParams 声明为采用 stringpluginid< 序列 等作为 child :

<!ELEMENT string (#PCDATA) >
<!ELEMENT classParams (string 
                      | (pluginid, bla, tag))
>

或者,如果

<classParams><string>foo</string></classParams> 

似乎太重了,您可以将 entry 声明为以 classParamsclassParamString 作为内容:

<!ELEMENT entry (class, (classParams | classParamString)) >
<!ELEMENT classParamString (#PCDATA) >
<!ELEMENT classParams (pluginid, bla, tag) >

关于xml - DTD 语法 - 允许子元素 OR pcdata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12261206/

相关文章:

java - struts-config.xml中action节点的 "attribute"属性有什么用?

parsing - RTF#PCDATA 与文档文本

android - Android 动画中的 XScale 与 XDelta

.net - ASP.NET web.config 文件失控了吗?

xml - DTD 定义中的注释

mysql - 从 DTD 文件制作 MySQL 表的问题

xml - XML DTD 中的 PCDATA 与 CDATA

javascript - 使用 javascript 插入 XML 源以进行选择

python - 使用 elementtree 在 Python 中迭代子标签的 XML 子代

c# - 使用外部 DTD 验证 XML