XML中用于“/”的实体是什么?

47

我正在编写一些生成XML代码,发现以下属性值破坏了XML格式:

"Jim/Bob"

我研究了一下XML实体用作转义序列的内容,但每个列表中都没有包括正斜杠。我是否遗漏了一些明显的东西?看起来像是你希望转义的事情...


3
你能定义“screwing up”这个词吗?你使用什么代码来创建XML? - AnthonyWJones
1
好的,事实证明它并不是“/”,而是同一行中另一个属性中的“&”。这就解释了为什么没有转义序列! - Alpants
回想起来,这个问题非常愚蠢,如果有人有足够的声望来删除它或关闭它...他们应该这样做! - Alpants
16
保持开放,谷歌把我带到这里是第一个结果,答案很有帮助。 - Drenai
我遇到了一个问题,未转义的正斜杠在XSLT中似乎引起了问题:<xsl:value-of select="Jim/Bob"/>。这尝试运行XPath表达式,结果失败了。我意识到我只需要用单引号将其包装起来就可以工作了:<xsl:value-of select="'Jim/Bob'"/>。我评论这个问题只是因为在我弄清楚之前,我的(愚蠢的)问题让我来到了这个页面。 - danjuggler
我也以为/会搞乱我的XML,所以这个问题很有用。 - Greg Woods
7个回答

63

3
在XML中,“%”不需要进行编码。“>”在某些特定情况下可能需要进行编码。“"”或“'”需要在属性值内进行编码(使用哪个作为属性定界符号的字符需要进行编码)。 - bobince
不,没有魔法,没有任何东西。在我的情况下,没有任何帮助。只有 formatted="false" 对我有用。 - Justin Case
一些文本编辑器会呈现看起来很正常的字符,但是在另一个编辑器中打开时,你会发现该字符实际上是非法字符。我曾经遇到这样的情况,将包括 MS Word 中的 em-dash(长破折号)在内的文本复制到 Notepad 中的 XML 文件中。在那里看起来很好,但是 XML 最终变成了无效的。在 Visual Studio Code 中查看文件时,em-dash 被呈现为无效字符(是带有问号的钻石形状)。因此,重新将文本复制到 Visual Studio Code 中并重新保存,文件保留了有效的 em-dash 字符。真是匪夷所思。 - Tahari

9

我知道最终问题并不是这个,但是我认为提到一下可能有帮助。除了bobince的答案外,Fraction Slash HTML实体&frasl;看起来就像一个正斜杠。以防有人真的需要表示正斜杠的HTML实体。


2
SAX解析器给了我一个引用但未声明的实体错误,使用 ⁄,因此我使用了Unicode相当于⁄,现在它非常有效。谢谢。 - Lambart
1
确实,@Lambart,我没有那么具体;您需要在XML中使用&#8260;实体,这也是有效的HTML,但在HTML中,您还可以使用更容易记住的&frasl; HTML实体。 - sinisterstuf
@bobince建议使用/,但也可以使用/。 - kurdtpage

8

我认为这个帖子中的评论并不完全正确,因为如果您使用模式(XSD),您可以定义名称为Jim、Bob和Jim/Bob的元素而不会出现任何问题。但是当您想要定义元素和实体时:

<names>
  <Jim>Carrey</Jim>
  <Bob>Jones</Bob>
  <Jim/Bob>Six figured Hillbilly</Jim/Bob>
</names>

问题是显而易见的。

1
谢谢。这就是我遇到的问题。我需要用有效的替代字符替换一堆无效的 XML 元素字符。 - Adam Bruss

7

请注意,斜杠虽然在XML中是有效的,但要注意它在下游使用时的情况。我们将其用于连接到Azure服务总线队列。Azure自动生成的连接字符串中带有斜杠键,但在我们尝试使用它们时却悄无声息地崩溃了。使用"&#47;"转义它们才可以使其正常工作。

"Jim&#47;Bob"

6

虽然没有预定义的实体引用,但您可以使用字符引用:“&#47;”。

然而,在XML中包含/时不需要转义。您可能需要在其他内容中包含它,例如URI路径部分。但是,您首先必须为该格式转义它;拾取URI的应用程序将无法知道您是否在XML中对其进行了编码。


3

我不明白为什么“Jim/Bob”这个值需要转义,或者会对XML造成任何问题。


-1

你可能有一个被XML Schema定义的受限制的属性。

我不知道你所说的XML格式化是什么意思。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接