【问题标题】:Inserting special characters like "#" in enumerated attribute values in XML DTD在 XML DTD 的枚举属性值中插入“#”等特殊字符
【发布时间】:2016-11-09 23:19:16
【问题描述】:

我有以下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>

我想要的是在枚举属性中有Java,C#,Python。 所以当我如下改变它时

&lt;!ATTLIST alien lang (Java|C#|Python) "Java"&gt;

它给了我一个错误

枚举类型列表在“lang”属性声明中必须以')'结尾

如何解决这个问题,在此先感谢

【问题讨论】:

    标签: java xml enumerate dtd


    【解决方案1】:

    恐怕这是不可能的。看看XML Specification, §3.3.1 Attribute types,枚举值应该是Nmtoken,这里列出了允许的字符here

    ASCII 符号和标点符号以及相当多的 Unicode 符号字符被排除在名称之外,因为它们在 XML 名称用于 XML 文档之外的上下文中作为分隔符更有用;提供该组为这些上下文提供了关于哪些内容不能成为 XML 名称的硬性保证。字符#x037E(希腊问号)被排除在外,因为规范化后它变成了一个分号,这可能会改变实体引用的含义。

    [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]

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

    【讨论】:

    • 所以我必须使用 C sharp 然后 :) 。无论如何很好的答案,谢谢。
    • C_sharp 将是必需的......也不允许使用空格(我忘了提及 - 我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多