在XML中如何转义双引号字符

120

在 xml 中,是否有双引号的转义字符?我想编写这样的标记:

<parameter name="Quote = " ">

但是如果我输入 ",那么这意味着字符串已经结束了。我需要像这样的东西(使用C ++):

printf("Quote = \" ");

在双引号前面有没有特殊的字符可以用来转义它?


查看此链接:https://dev59.com/_XNA5IYBdhLWcg3wGJwV - karim79
可能是 What characters do I need to escape in XML documents? 的重复问题。 - StayOnTarget
简短回答:“Rest of the story...”(故事的其余部分…) - kjhughes
8个回答

203

试试这个:

&quot;

143

以下是XML中需要转义的常见字符,从双引号开始:

  1. 双引号(") 转义为 &quot;
  2. 和号(&) 转义为 &amp;
  3. 单引号(') 转义为 &apos;
  4. 小于号(<) 转义为 &lt;
  5. 大于号(>) 转义为 &gt;

6
“'” 不是一个有效的 XML 字符,但它是一个有效的 HTML 字符,HTML 是 SGML 的超集,也是 XML 的超集。 - Stefan Steiger
虽然这是一个有效的观点,但我使用过的大多数现代XML解析器都将其作为有效字符接受。 - Dariusz G. Jagielski
当字符串被双引号包围时,Android无法正确解释。在这种情况下,E-max的答案是唯一可行的。 - Softlion
@StefanSteiger 它在这个列表上。 - OrangeDog
1
@Dariusz G. Jagielski:虽然我没有反对现代XML解析器,但如果您在数据库(例如ms/pg)中使用XML,您会发现并非所有软件都使用现代XML解析器。特别是当它是复杂的几十年前的软件时。也就是说,如果每个人都使用现代xml解析器,那将是一件好事。然而,如果该代码深度集成在旧的复杂软件中,则很难替换它(同时保持100%向后兼容性)。这就是不使用依赖注入或C的缺点。 - Stefan Steiger

28

其他回答已经解释了如何处理这种情况下的特定转义。

一个更广泛的答案是不要自行处理。使用 XML API - 现代编程平台几乎都有相应的 API。

XML API 会自动处理此类问题,使得出现错误的可能性大大降低。除非你是在编写自己的 XML API,否则很少需要关心这样的细节。


12
我不敢说我同意。认为我们应该如此依赖API以至于我们甚至不需要理解如何阅读和写入XML,这似乎是愚蠢的想法。当您提供格式错误的文档并导致它崩溃时,XML API可能并不能帮助您很多。有人必须修复数据以使其加载。 - Christopher Painter
鉴于XML标准的规模,我怀疑真正理解它的人并不多。现在有很多人认为他们理解了,但实际上他们并没有。 - Kuba hasn't forgotten Monica
2
嗯,你得从某个地方开始。在我们的行业中,我们只是抱怨XML很糟糕,然后重新开始使用其他东西,比如JSON。然后这个过程会重复。 - Christopher Painter

16

针对一些经常被提问的问题,这里有一个新的、改进过的答案...

在XML中何时需要转义双引号

双引号(")可以不用转义:

  • In XML textual content:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
    
  • In XML attributes delimited by single quotes ('):

    <NoEscapeNeeded name='Pete "Maverick" Mitchell'/>
    

    Note: switching to single quotes (') also requires no escaping:

    <NoEscapeNeeded name="Pete 'Maverick' Mitchell"/>
    

双引号 (") 必须被转义:

  • In XML attributes delimited by double quotes:

    <EscapeNeeded name="Pete &quot;Maverick&quot; Mitchell"/>
    

底线

在XML中,双引号(")仅在非常有限的情况下必须转义为&quot;


8

如果您只是需要快速尝试一些东西,这里有一个快速而简单的解决方案。使用单引号作为属性值:

<parameter name='Quote = " '>

我不会称之为一个草率的解决方案,它相当优雅和简单。 :) - undefined

7

没有像样的转义字符,但可以使用&quot;甚至<![CDATA["]]>来表示"字符。


2
您可以尝试使用反斜杠后跟“u”,然后是字符的unicode值,例如双引号的unicode值为U+0022。因此,如果您要将其设置为Android中XML文本的一部分,则会像这样显示:
<TextView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:text=" \u0022 Showing double quotes \u0022 "/>

这将在 TextView 中产生类似以下内容的文本:

“显示双引号”

您可以在 www.unicode-table.com/en 找到大多数符号和字符的 Unicode。


你可以在这里找到大多数符号和字符的Unicode:https://unicode-table.com/zh/ - EAM

2
在C++中,您可以使用EscapeXML ATL API来处理特殊字符。这是正确的处理方式...

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