gpt4 book ai didi

xml - 在 DTD 实体中使用特殊字符,例如 '+'

转载 作者:数据小太阳 更新时间:2023-10-29 02:42:06 33 4
gpt4 key购买 nike

我正在尝试定义一个实体,其值包含一个“+”字符,但如果我这样做,我会进一步收到一条奇怪的错误消息。如果我删除 + 字符,一切正常。我似乎想不出逃避它的方法。
我不仅在当前使用的库中遇到错误,而且在 http://www.validome.org/grammar/validate/ 的在线验证程序中也遇到错误一个简短的例子:

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

<!ENTITY % Foo "BAR"> <!--No problem here-->
<!ENTITY % Baz "QUUX+QUUUX"> <!--This will cause trouble later on-->

<!ENTITY % FooBazType "( %Foo; | %Baz; )">

<!ELEMENT tagName EMPTY>
<!ATTLIST tagName attributeName %FooBazType; #REQUIRED> <!--Here, you get the error message : The enumerated type list must end with ')' in the "attributeName" attribute declaration.-->

有没有人知道在那里以某种方式获取 + 字符(或者也可以正确验证在该位置包含 + 字符的 XML 文档的东西)的方法?提前致谢!

最佳答案

问题不在于实体本身,而在于它用于定义 legal values are enumerated 所在的属性这一事实.这些值必须匹配 Nmtoken(一个或多个 NameChar)。这不包括不属于 the definition of NameChar 的“+”和“$” .下面的例子说明了这一点。

plus.dtd:

<!ELEMENT tagName EMPTY>
<!ATTLIST tagName
attributeName (BAR | FOO+BAZ) #REQUIRED>

plus.xml:

<tagName attributeName="FOO+BAZ"/>    

尝试根据 plus.dtd 验证 plus.xml 时的 xmllint 输出:

xmllint --dtdvalid plus.dtd plus.xml 
<?xml version="1.0"?>
<tagName attributeName="FOO+BAZ"/>
plus.dtd:2: parser error : ')' required to finish ATTLIST enumeration
<!ATTLIST tagName attributeName (BAR | FOO+BAZ) #REQUIRED>
^
plus.dtd:2: parser error : Space required after the attribute type
<!ATTLIST tagName attributeName (BAR | FOO+BAZ) #REQUIRED>
^
plus.dtd:2: parser error : Content error in the external subset
<!ATTLIST tagName attributeName (BAR | FOO+BAZ) #REQUIRED>
^
Could not parse DTD plus.dtd

在固定属性值中使用 '+' 或 '$' 是可以的。

plus2.dtd:

<!ELEMENT tagName EMPTY>
<!ATTLIST tagName
attributeName CDATA #FIXED "FOO+$BAZ">

xmllint 输出(无错误):

xmllint --dtdvalid plus2.dtd plus.xml 
<?xml version="1.0"?>
<tagName attributeName="FOO+$BAZ"/>

关于xml - 在 DTD 实体中使用特殊字符,例如 '+',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8703181/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com