如何表示"&" xml中的字符

时间:2014-08-07 05:44:13

标签: xml c#-4.0

我有一个xml文件,我需要“&”要打印表单中的复选框名称。但是“&”没有打印。我使用的符号是&。但在这种情况下,它不会打印出来。我怎么能这样做,有没有其他方式来代表? XML格式如下所述。

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Strings[<!ELEMENT Strings ANY><!ELEMENT String ANY><!ATTLIST String Name ID #REQUIRED>]> <Strings> <String Name="0">&#65286;</String> </Strings>

下面的代码段

public string Load(string _strShortName)
    {
        StreamReader reader = null;
        string l_strShortname = _strShortName;
        try
        {
            xmlCurrentLanguage = new XmlDocument();
            //added for the fix and commented
            if (File.Exists(strPath + "lang_" + _strShortName + ".xml"))
            {
                reader = new StreamReader(File.OpenRead(strPath + "lang_" + _strShortName + ".xml"));
            }
             else
            {
                //hot fix language change issue.
                reader =new StreamReader(File.OpenRead( strPath + "lang_en.xml"));

            }
            xmlCurrentLanguage.PreserveWhitespace = true;
            xmlCurrentLanguage.Load(reader);
            reader.Close();
            reader.Dispose();
        }
        catch (Exception e)
        {
            if (reader != null)
            {
                reader.Close();
                reader.Dispose();
            }
            MessageBox.Show(e.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);                                
        }
        return l_strShortname;
    }

     public string GetString(string _id)
    {
        // Versuche eine zu laden
        XmlNode node = null;
        if (xmlCurrentLanguage != null)
        {
            node = xmlCurrentLanguage.GetElementById(_id);
            if (node != null)
            {
                return Parse(node.InnerText);
            }
        }
        return "";
    }

    private string Parse(string str)
    {
        string parsedStr;
        parsedStr = str.Replace("\n", System.Environment.NewLine);
        parsedStr = str.Replace("%n", System.Environment.NewLine);
        return parsedStr;
    }

    public string GetText(string _id, params string[] _cmd)
    {
        string str = GetString(_id);
        string origError = GetString(_id + "_O");
        if (origError != "")
        {
            for (int i = 0; i < _cmd.Length; i++)
            {
                str = _cmd[i].Replace(origError, str);
            }
        }
        else
        {
            for (int i = 0; i < _cmd.Length; i++)
            {
                str.Replace("%" + (i + 1), _cmd[i]);
            }
        }
        return str;
    }

在表格中,

 public void FillUICaption(ref Language currentLanguage)
{
   chkbox.Text = language.TXT_DEFAULT_KET;
}

访问值的代码

 public string TXT_DEFAULT_KET{ get { return GetString("1000"); } }

2 个答案:

答案 0 :(得分:1)

您可以使用&amp;来表示xml中的&符号。几乎每个Xml解析器都会将它读作&

更新: 您的xml文件应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Strings[<!ELEMENT Strings ANY><!ELEMENT String ANY><!ATTLIST String Name ID #REQUIRED>]>
 <Strings>
  <String Name="0">&amp;</String>
</Strings>

更新: 找不到该元素的原因是因为您使用此代码来访问该值:

public string TXT_DEFAULT_KET{ get { return GetString("1000"); } }

不存在具有此类字符串ID(即名称)的元素。将其替换为以下内容以获得您想要的效果。

public string TXT_DEFAULT_KET{ get { return GetString("0"); } }

顺便说一下,你实际上不能在Windows窗体复选框中显示&字符,因为它用于突出显示热键。使用&&显示它。

答案 1 :(得分:0)

See here 通常xml基于编码=&#34; UTF-8&#34;并且它仅通过使用数字字符表示来支持特殊字符。 这里是Ampersand &#38; or &amp;(which is entity reference)

的情况