XML 中的特殊字符
我正在使用 xml 和 xsl 创建一个左侧导航系统。 一切都很顺利,直到我尝试在 xml 文档中使用特殊字符。 我正在使用 »
并且收到错误。
原因:引用未定义的实体“raquo”。
错误代码:-1072898046
我该如何使其工作?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
您正尝试在非 HTML 或非 XHTML 文档中使用 HTML 实体。 这些实体在文档的文档类型定义 (DTD) 中声明。
您应该使用实体引用的数字 Unicode 版本。 例如,在
»
的情况下,您应该使用»
或者,您可以 在 XML 文档的 DTD 中定义它们:
否则,如果您的文档是 UTF-8,我相信您可以直接在 XML 文档中使用实际字符。
You are trying to use an HTML entity in a non-HTML or non-XHTML document. These entities are declared in the document's Document Type Definition (DTD).
You should use the numerical Unicode version of the entity reference. For example, in the case of
»
you should use»
Alternatively, you can define them in your XML document's DTD:
Otherwise, if your document is UTF-8, I believe you can just use the actual character directly in your XML document.
您是否为文件指定了文档类型?
我认为如果您忘记指定它,您可能会收到此类错误。
有时,如果您通过数字而不是名称指定实体,它们也会起作用。
did you specify a doc type for your file ?
I think you might get such errors if you forget to specify it.
Also sometimes the entities work if you specify them by number instead of name.
您不需要在 DTD 中声明实体,甚至不需要使用 DTD。 您可能不需要使用字符的 Unicode 表示形式。 您当然不需要使用CDATA 部分。
您需要做的是使用 DOM 来构建 XML,而不是尝试通过字符串操作来构建它。 DOM 将为您解决这个问题。
在 C# 中,此代码:
产生此输出:
正如您从第一个示例中看到的,» 字符在 XML 文本中是完全合法的。 但我不认为你想代表那个角色。
我认为您正在尝试根据您报告的错误消息执行第二个示例中的操作。 您正在尝试表示字符串
»
。 在 XML 文本中表示该字符串的正确方法是转义 & 符号; 因此:»
。因此,如果您必须使用字符串操作来构建 XML,只需确保转义源数据中的所有 & 符号即可。 无需赘述,但如果您使用 DOM,这将会自动为您完成。
另一件事。 很可能在您原来的问题中,现在显示为“我正在使用 »”,您实际输入的内容很可能是“我正在使用 »”。 但实际的帖子看起来并非如此。 如果您需要在 Markdown 中按字面意思表示文本,请将其用反引号括起来; 否则,在呈现帖子时,HTML 实体将转换为其字符表示形式。
You don't need to declare an entity in your DTD, or even use a DTD. You probably don't need to use the Unicode representation of the character. You certainly don't need to use a CDATA section.
What you need to do is use a DOM to build your XML instead of trying to build it with string manipulation. The DOM will fix this problem for you.
In C#, this code:
produces this output:
As you can see from the first example, the » character is perfectly legal in XML text. But I don't think you're trying to represent that character.
I think you're trying to do what's in the second example, based on the error message that you reported. You're trying to represent the string of characters
»
. The proper way to represent that string of characters in XML text is by escaping the ampersand; thus:»
.So if you must use string manipulation to build your XML, just make sure that you escape any ampersands in your source data. Not to belabor the point, but if you were using a DOM, this would have been done for you automatically.
One other thing. It's quite likely that in your original question, which now reads "I am using »", what you actually typed is "I am using »". The actual post doesn't look like that, though. If you need to represent text literally in markdown, enclose it in backticks; otherwise, HTML entities will get converted to their character representation when the post is rendered.
这是一个问题,因为并非所有 HTML 实体都是 XML 实体。 您可以按照 Pat 的建议将 HTML 的 DTD 导入到文档中,或者执行以下操作之一:
将所有出现的特殊字符替换为数字实体代码:
将所有出现的特殊字符包装在 CDATA 标记中
在以下位置定义实体文档顶部
This is an issue because not all HTML entities are XML entity. You can import the DTD of HTML into your document as Pat suggested, or do one of the following:
Replace all the occurances of the special character with the numeric entity code:
Wrap all occurances of the special characters in a CDATA Tag
Define entitys at the top of your document
您是直接使用 » 符号还是将其定义为 » ? 如果您使用转义符号,您是否忘记了分号?
Are you using the » symbol directly or are you defining it as » ? If you're using the escaped symbol, did you forget the semicolon?
Joe
当我使用 unicode 版本时显示一个正方形。
将实体声明放入 xml 文档中会生成“不能在 DTD 之外有 DTD 声明”。 错误。 我想这是预料之中的。
当我使用 '' 在外部包含 dtd 时,它似乎没有任何效果。
我想知道这是否可能是服务器问题。 我正在本地开发这个并使用 Baby Web Server。
Joe
When I use the unicode version shows a square.
Putting the entity decalration into the xml doc produces a "Cannot have a DTD declaration outside of a DTD." error. I suppose this is expected.
When I use '' to include the dtd externally it doesn't seem to have any effect.
I am wondering if this is maybe a server issue. I am developing this locally and using Baby Web Server.
只需将 HTML 实体
»
替换为数字引用»
,这适用于任何 XML 和 HTML。simply replace your HTML entity
»
with the numeric reference»
which is good in any XML and HTML.我发现自己经常在谷歌上搜索此类信息,因此决定在自己的网站上发布一个矩阵,其简单目的是快速查找:
http://martinkool.com/characters
使用 &#...; 确实形成。
I found myself googling for such info a lot, so decided to post a matrix on my own site for the simple purpose of quickly being able to do a lookup:
http://martinkool.com/characters
Use the &#...; form indeed.
如果您希望输出文档包含命名的 HTML 实体
»
而不是数字引用,请将以下元素添加到样式表中(仅限 XSLT2.0):If you want the output document to contain the named HTML entity
»
rather than the numeric reference, add the following elements to your stylesheet (XSLT2.0 only):