XML和数据绑定控件中的撇号

时间:2010-03-01 18:10:23

标签: asp.net html xml data-binding

在我的XML中,撇号可能出现在节点的值中:

<Root>
    <Sections>
        <SectionA>
            <Heading>Title</Heading>
            <Description>This is section 'A'</Description>
        </SectionA>
    </Sections>
</Root>

如果我有绑定到此XML的控件:

<asp:FormView ID="myFormView" runat="server" DataSourceID="myXmlDataSource">
    <ItemTemplate>
        <div>
            HTML Element:
            <input type="text" value='<%# XPath("text()") %>' />
        </div>
        <div>    
            Server Control:
            <asp:TextBox id="myTextBox" runat="server" value='<%# XPath("text()") %>' />
        </div>
    </ItemTemplate>
</asp:FormView>           
<asp:XmlDataSource ID="myXmlDataSource" runat="server" XPath="Root/Sections/SectionA" />

我注意到文本在asp:TextBox中正确显示,但在INPUT元素中没有。我假设这是因为服务器控件正确地逃避了撇号。为了解决这个问题,我尝试将XML中的Description节点更改为以下内容:

<Description>This is section &#39;A&#39;</Description>

同样,这在asp:TextBox中正确显示,但在INPUT元素中没有显示。

我的下一次尝试是将节点的值包装在CDATA中:

<Description><![CDATA[This is section &#39;A&#39;]]></Description>

最后它在INPUT元素中正确显示,但现在asp:TextBox显示了两个“&amp;#3 9;”。我甚至试过“&amp; a p o s;”但结果是一样的。

在XML中使用撇号的最佳方法是什么?值可以在服务器控件或HTML元素中显示?

2 个答案:

答案 0 :(得分:1)

这里你有一个围绕html元素的value参数的单引号:

 <input type="text" value='<%# XPath("text()") %>' />

这呈现:

value='This is section 'A'' 

而是使用双引号:

 <input type="text" value="<%# XPath("text()") %>" />

呈现:

<input type="text" value="This is section 'A'" />

答案 1 :(得分:0)

使用&amp;代替。它是XML中允许的5个实体之一。

所以你的代码看起来像是:

<Description>This is section &apos;A&apos;</Description>