DTD语法 - 允许子元素OR pcdata

时间:2012-09-04 10:08:29

标签: 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 ) >

3 个答案:

答案 0 :(得分:2)

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

<!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) >

答案 1 :(得分:1)

我做到了:

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

答案 2 :(得分:0)

你也可以通过这种方式实现它:

<!ELEMENT classParams ANY>