更新:为每个请求添加了更多详细信息
我正在尝试为我的应用程序创建一个xml配置文件。该文件包含要在html文档中搜索和替换的条件列表。问题是,我需要搜索像 
这样的字符串。我不希望我的代码读取已解码的项目,而是文本本身。
承认自己是XML的新手,我确实尝试过满足要求。我在Stackoverflow上阅读了关于CDATA
和ATTRIBUTES
的大量链接等等,但这里(以及其他地方)的示例似乎侧重于在xml文件中创建一行而不是多行。< / p>
以下是我做过的许多尝试之一无济于事:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE item [
<!ELEMENT item (id, replacewith)>
<!ELEMENT id (#CDATA)>
<!ELEMENT replacewith (#CDATA)>
]>
]>
<item id=" " replacewith=" ">Non breaking space</item>
<item id="‑" replacewith="-">Non breaking hyphen</item>
本文档给出了一些错误,包括:
<!ELEMENT id (#CDATA)>
之类的错误。在CDATA领域,Visual Studio告诉我它正在期待一个&#39;&#39;或&#39; |&#39;。]>
误给我invalid token at the root of the document
。<item
条目之后,我收到一条错误,指出XML document cannot contain multiple root level elements
。如何编写包含多个项的xml文件和允许我存储和检索元素中的文本,而不是解释的字符?
如果它有帮助,我使用.Net,C#和Visual Studio。
修改
这个xml文件的目的是为我的代码提供一个在html文件中搜索和替换的东西列表。 xml文件只包含what to search for
和what to replace with
的列表。
这是我现在的文件:
<?xml version="1.0" encoding="utf-8" ?>
<Items>
<item id="‑" replacewith="-">Non breaking hyphen</item>
<item id=" " replacewith=" ">Non breaking hyphen</item>
</Items>
使用第一个作为示例,我想阅读文本‑
,但是当我读到这篇文章时,我得到-
,因为这就是代码所代表的内容。
您可以提供的任何帮助或指示都会有所帮助。
答案 0 :(得分:1)
详细说明我的评论:由于保留字符,XML就像HTML一样。当使用任何类型的解析器(浏览器,XML读取器等)读入时,&符号前缀关键字或字符代码将转换为文字字符串。
转义值的最简单方法是确保将它们作为您想要的文字读回来,就像将它们编码为Web一样。例如,要创建XML文档,我这样做了:
XmlDocument xmlDoc = new XmlDocument();
XmlElement xmlItem;
XmlAttribute xmlAttr;
XmlText xmlText;
// Declaration
XmlDeclaration xmlDec = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
XmlElement xmlRoot = xmlDoc.DocumentElement;
xmlDoc.InsertBefore(xmlDec, xmlRoot);
// Items
XmlElement xmlItems = xmlDoc.CreateElement(string.Empty, "Items", string.Empty);
xmlDoc.AppendChild(xmlItems);
// Item #1
xmlItem = xmlDoc.CreateElement(string.Empty, "item", string.Empty);
xmlAttr = xmlDoc.CreateAttribute(string.Empty, "id", string.Empty);
xmlAttr.Value = "‑";
xmlItem.Attributes.Append(xmlAttr);
xmlAttr = xmlDoc.CreateAttribute(string.Empty, "replacewith", string.Empty);
xmlAttr.Value = "-";
xmlItem.Attributes.Append(xmlAttr);
xmlText = xmlDoc.CreateTextNode("Non breaking hyphen");
xmlItem.AppendChild(xmlText);
xmlItems.AppendChild(xmlItem);
// Item #2
xmlItem = xmlDoc.CreateElement(string.Empty, "item", string.Empty);
xmlAttr = xmlDoc.CreateAttribute(string.Empty, "id", string.Empty);
xmlAttr.Value = " ";
xmlItem.Attributes.Append(xmlAttr);
xmlAttr = xmlDoc.CreateAttribute(string.Empty, "replacewith", string.Empty);
xmlAttr.Value = " ";
xmlItem.Attributes.Append(xmlAttr);
xmlText = xmlDoc.CreateTextNode("Non breaking hyphen");
xmlItem.AppendChild(xmlText);
xmlItems.AppendChild(xmlItem);
// For formatting
StringBuilder xmlBuilder = new StringBuilder();
XmlWriterSettings xmlSettings = new XmlWriterSettings
{
Indent = true,
IndentChars = " ",
NewLineChars = "\r\n",
NewLineHandling = NewLineHandling.Replace
};
using (XmlWriter writer = XmlWriter.Create(xmlBuilder, xmlSettings))
{
xmlDoc.Save(writer);
}
xmlOutput.Text = xmlBuilder.ToString();
请注意,我根据您的期望输入了id
值。现在,看看它是如何编码的:
<?xml version="1.0" encoding="utf-16"?>
<Items>
<item id="&#8209;" replacewith="-">Non breaking hyphen</item>
<item id=" " replacewith="&nbsp;">Non breaking hyphen</item>
</Items>
你和这个之间的唯一区别是&符编码为&
,其余的仍然是字符串文字。这是XML的正常行为。当您重新阅读时,它会以文字‑
和
的形式返回。