XML 中的特殊字符

发布于 2024-07-07 23:16:26 字数 210 浏览 11 评论 0 原文

我正在使用 xml 和 xsl 创建一个左侧导航系统。 一切都很顺利,直到我尝试在 xml 文档中使用特殊字符。 我正在使用 » 并且收到错误。

原因:引用未定义的实体“raquo”。
错误代码:-1072898046

我该如何使其工作?

I am creating a left navigation system utilizing xml and xsl. Everything was been going great until I tried to use a special character in my xml document. I am using » and I get th error.

reason: Reference to undefined entity 'raquo'.
error code: -1072898046

How do I make this work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

我们只是彼此的过ke 2024-07-14 23:16:26

您正尝试在非 HTML 或非 XHTML 文档中使用 HTML 实体。 这些实体在文档的文档类型定义 (DTD) 中声明。

您应该使用实体引用的数字 Unicode 版本。 例如,在 » 的情况下,您应该使用 »

或者,您可以 在 XML 文档的 DTD 中定义它们

<!ENTITY entity-name "entity-value">
<!ENTITY raquo "»">

否则,如果您的文档是 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:

<!ENTITY entity-name "entity-value">
<!ENTITY raquo "»">

Otherwise, if your document is UTF-8, I believe you can just use the actual character directly in your XML document.

»
风柔一江水 2024-07-14 23:16:26

您是否为文件指定了文档类型?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

我认为如果您忘记指定它,您可能会收到此类错误。

有时,如果您通过数字而不是名称指定实体,它们也会起作用。

» « instead of » and «

did you specify a doc type for your file ?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

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.

» « instead of » and «
箹锭⒈辈孓 2024-07-14 23:16:26

您不需要在 DTD 中声明实体,甚至不需要使用 DTD。 您可能不需要使用字符的 Unicode 表示形式。 您当然不需要使用CDATA 部分。

您需要做的是使用 DOM 来构建 XML,而不是尝试通过字符串操作来构建它。 DOM 将为您解决这个问题。

在 C# 中,此代码:

 XmlDocument d = new XmlDocument();
 d.LoadXml("<foo/>");
 char c = (char)187;
 d.DocumentElement.InnerText = "Here's that character: " + c;
 Debug.WriteLine(d.OuterXml);
 d.DocumentElement.InnerText = "Here it is as an HTML entity: »";
 Debug.WriteLine(d.OuterXml);

产生此输出:

<foo>Here's that character: »</foo>
<foo>Here it is as an HTML entity: &raquo;</foo>

正如您从第一个示例中看到的,» 字符在 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:

 XmlDocument d = new XmlDocument();
 d.LoadXml("<foo/>");
 char c = (char)187;
 d.DocumentElement.InnerText = "Here's that character: " + c;
 Debug.WriteLine(d.OuterXml);
 d.DocumentElement.InnerText = "Here it is as an HTML entity: »";
 Debug.WriteLine(d.OuterXml);

produces this output:

<foo>Here's that character: »</foo>
<foo>Here it is as an HTML entity: &raquo;</foo>

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: &raquo;.

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.

潜移默化 2024-07-14 23:16:26

这是一个问题,因为并非所有 HTML 实体都是 XML 实体。 您可以按照 Pat 的建议将 HTML 的 DTD 导入到文档中,或者执行以下操作之一:

将所有出现的特殊字符替换为数字实体代码:

» becomes »

将所有出现的特殊字符包装在 CDATA 标记中

<![CDATA[»]]>

在以下位置定义实体文档顶部

<!DOCTYPE ROOT_XML_ELEMENT [ <!ENTITY raquo "»"> ]>

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:

» becomes »

Wrap all occurances of the special characters in a CDATA Tag

<![CDATA[»]]>

Define entitys at the top of your document

<!DOCTYPE ROOT_XML_ELEMENT [ <!ENTITY raquo "»"> ]>
厌倦 2024-07-14 23:16:26

您是直接使用 » 符号还是将其定义为 » ? 如果您使用转义符号,您是否忘记了分号?

Are you using the » symbol directly or are you defining it as » ? If you're using the escaped symbol, did you forget the semicolon?

剑心龙吟 2024-07-14 23:16:26

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.

嗳卜坏 2024-07-14 23:16:26

只需将 HTML 实体 » 替换为数字引用 »,这适用于任何 XML 和 HTML。

simply replace your HTML entity » with the numeric reference » which is good in any XML and HTML.

九命猫 2024-07-14 23:16:26

我发现自己经常在谷歌上搜索此类信息,因此决定在自己的网站上发布一个矩阵,其简单目的是快速查找:

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.

恋竹姑娘 2024-07-14 23:16:26

如果您希望输出文档包含命名的 HTML 实体 » 而不是数字引用,请将以下元素添加到样式表中(仅限 XSLT2.0):

<xsl:output use-character-maps="raquo.ent"/>
<xsl:character-map name="raquo.ent">
    <xsl:output-character character="»" string="&raquo;"/>
</xsl:character-map>

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):

<xsl:output use-character-maps="raquo.ent"/>
<xsl:character-map name="raquo.ent">
    <xsl:output-character character="»" string="&raquo;"/>
</xsl:character-map>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文