插入特殊字符,如"#"在XML DTD中的枚举属性值中

时间:2016-11-09 04:49:39

标签: java xml dtd enumerate xml-dtd

我有以下xml.dtd文件

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT aliens (alien+,alienTesting)>    
<!ELEMENT alien (name,from,middleName?)>  
<!ELEMENT name (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT middleName (#PCDATA)>

<!--defining element attributes -->


<!ATTLIST alien aid ID #REQUIRED>
<!ATTLIST alien bioType CDATA #IMPLIED>

<!ATTLIST alien lang (Java|C|Python) "Java">

<!ELEMENT alienTesting (alienT*)>
<!ELEMENT alienT (#PCDATA)>

这是xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE aliens SYSTEM "AleinDTD.dtd">

<aliens>

    <alien aid="a01">
        <name>Kasun </name>
        <from>Northwest</from>
    </alien>

    <alien aid="a02">
        <name>Madu</name>
        <from>south</from>

    </alien>

    <alienTesting>
        <alienT></alienT>

    </alienTesting>

</aliens>

我想要的是在枚举属性中包含JavaC#Python。 所以当我改变它如下

<!ATTLIST alien lang (Java|C#|Python) "Java">

它给我一个错误

  

枚举类型列表必须以&#39;)&#39;结尾。在&#34; lang&#34;属性声明

如何解决此问题,提前致谢

1 个答案:

答案 0 :(得分:1)

我担心它不会成为可能。看一下XML Specification, §3.3.1 Attribute types,枚举值应为Nmtoken,其中列出的字符列为here

  

ASCII符号和标点符号以及相当大的一组Unicode符号字符将从名称中排除,因为它们在XML文档外部使用XML名称的上下文中更有用作为分隔符。提供此组可以为这些上下文提供有关不能成为XML名称一部分的内容的硬性保证。字符#x037E,GREEK QUESTION MARK被排除在外,因为在规范化时它会变成分号,这可能会改变实体引用的含义。

     

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

     

[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

Grossely,您可以使用数字和字母(来自任何语言),连字符,圆点,下划线但不是空格,# ( ) [ ] |和其他标点符号。