在XML属性中转义撇号

时间:2011-02-06 21:40:13

标签: c# xml

尝试将一些XML加载到文档中:

<Custom AttributeA='' AttributeB='Bob' AttributeC='HUNTERS' COMPANY EMPLOYEES' 403B PLAN' />

然后当我尝试将其添加到文档中时:

XmlDocument xmlCustom = new XmlDocument();
xmlCustom.LoadXml(customNode);

我最终收到一条错误消息System.Xml.XmlException:'COMPANY'是一个意外的令牌。预期的标记是'='。 AttributeC的价值应该是:猎人的公司员工'403B计划

我尝试在加载XML之前替换',但它替换了所有的撇号,而AttributeA =''同样无效。

编辑:是的,我会同意形成不良,但这是我必须要合作的。

4 个答案:

答案 0 :(得分:3)

您可以使用

<Custom AttributeC="HUNTERS&apos; COMPANY EMPLOYEES'&apos; 403B PLAN"/>

<Custom AttributeC="HUNTERS' COMPANY EMPLOYEES' 403B PLAN"/>

甚至

<Custom AttributeC='HUNTERS&apos; COMPANY EMPLOYEES&apos; 403B PLAN'/>

答案 1 :(得分:2)

这个标记有很多问题。

这不是XML。 XML使用双引号作为属性(好吧,我刚学会单引号也可以)。但它需要在属性名称和值之间使用equals-Signs(请参阅上一个属性)。此外,属性名称不能包含空格,并且必须分配一个值,与HTML不同。

哦,如果没有结束标记,则必须使用/>结束该行,而不仅仅是>

如果你想在你的属性中有一个撇号,你可以使用转义,就像这里:

<gangster name="George &quot;Shotgun&quot; Ziegler">

或使用单引号(以及转义的单引号):

<ad text='I love McDonald&apos;s'>

或者当您想要属性中的单引号时使用双引号:

<ad text="I love McDonald's">

答案 2 :(得分:1)

将撇号编码为&apos;

<Custom AttributeA='' AttributeB='Bob' AttributeC='HUNTERS&apos; COMPANY EMPLOYEES&apos; 403B PLAN' />

答案 3 :(得分:0)

属性名称不允许使用空格。你必须输入这样的东西:

<Custom AttributeA='' AttributeB='Bob' AttributeC='HUNTERS&apos; COMPANY EMPLOYEES&apos; 403B PLAN'/>