【问题标题】:How to define attributes to optional element?如何定义可选元素的属性?
【发布时间】:2012-08-29 01:19:28
【问题描述】:

我的 XML 可能包含多个 param 条目,每个条目都有 keyvalue 属性,如下所示:

<entry id="entry1">
    <classParams>
       <param key="pluginid" value="monitorPlugin" />
       <param key="pluginid2" value="monitorPlugin2" />
    </classParams>
</entry>

AND/OR 一个 classParams 只包含一个这样的字符串:

<entry id="entry2">
    <classParams>
      Im a string
    </classParams>
</entry>

我的 DTD:

<!ELEMENT classParams ( #PCDATA | param* )* >
<!ATTLIST id CDATA #REQUIRED value CDATA #REQUIRED >
<!ELEMENT param ( #PCDATA ) >

我如何正确定义我的 DTD,涉及两种条目类型和仅一种类型的属性定义?

【问题讨论】:

    标签: xml parsing dtd


    【解决方案1】:

    这个 DTD 应该可以工作...

    <!ELEMENT entry (classParams)>
    <!ATTLIST entry
              id CDATA #REQUIRED>
    
    <!ELEMENT classParams (#PCDATA|param)*>
    
    <!ELEMENT param (#PCDATA)>
    <!ATTLIST param
              key CDATA #REQUIRED
              value CDATA #REQUIRED>
    

    【讨论】:

    • 感谢您的回答。 EMPTY 定义了什么?如果我希望 keyid 成为属性,而不是同时允许但至少始终需要一个属性,定义是什么?
    • EMPTY 表示它是一个空元素。在您的情况下,应该是#PCDATA。 (我将进行编辑。)在 DTD 中,您不能对属性声明执行“或”操作。你能做的最好的就是隐含并以其他方式进行检查。
    【解决方案2】:

    我是按照这个定义来做的。我现在只使用id 并将值放入param

    <!ELEMENT classParams ( #PCDATA  | param )* >
             <!ELEMENT param ( #PCDATA ) >
             <!ATTLIST param 
                id CDATA #REQUIRED
             >
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 2013-10-31
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多