【问题标题】:How to represent "&" character in the xml如何在xml中表示“&”字符
【发布时间】:2014-08-07 05:44:12
【问题描述】:

我有一个 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>

下面是sn-p的代码,

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"); } }

【问题讨论】:

    标签: xml c#-4.0


    【解决方案1】:

    您可以使用&amp;amp; 代表&amp;amp; 登录xml。几乎每个 Xml 解析器都会将其读取为 &amp;amp;

    更新: 您的 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 表单复选框中仅显示 &amp;amp; 字符,因为它用于突出显示热键。使用&amp;&amp; 显示。

    【讨论】:

    • “几乎所有”?如果它不理解&amp;amp;,那么它就不是 XML 解析器。根据定义。
    • 我同意,但是那里有很多自定义的 xml 解析器,这让我不太确定。并非每个程序员都按部就班。
    • 你能把代码贴在你正在阅读这个xml的地方吗?另外,设置复选框的表单代码也会有所帮助。
    • Yogesh,您不能生成一个不处理格式良好的 XML 的解析器,并将其称为 XML 解析器。是的,我知道那里有垃圾程序员:他们中的一些,以及更多的受害者,都在 StackOverflow 上,但我们不能同意当有人说 XML 时,他们的意思是 XML?
    • @Michael:我完全同意你的看法。 :)
    【解决方案2】:

    See here 通常xml是基于encoding="UTF-8"的,它只支持使用数字字符表示的特殊字符。 这里是 & 符号&amp;#38; or &amp;amp;(which is entity reference)

    【讨论】:

    • 当我添加它以打印 & 时,我得到一个方框:(
    • &amp;amp; 是 & 符号的正确表示。如果它不起作用,则说明其他问题。
    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多