2

我的 .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 文件以允许classParams1. 是字符串或 2. 多个子元素(每个一次)?

我试过了:

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

3 回答 3

2

DTD 不能强制执行您描述的约束;获得类似约束的最简单方法是添加一个新元素(调用它string)并将 classParams 声明为将其中一个string或等序列pluginid作为子元素:

<!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) >
于 2012-09-09T18:29:43.247 回答
1

我做到了:

<!ELEMENT classParams ( #PCDATA | pluginid | bla | tag )* >
于 2012-09-04T12:11:25.767 回答
0

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

<!ELEMENT classParams ANY>
于 2015-05-01T12:30:40.493 回答