以 XML 格式格式化字符串并删除无效的属性字符

Posted

技术标签:

【中文标题】以 XML 格式格式化字符串并删除无效的属性字符【英文标题】:Formatting string in XML format and remove invalid attribute characters 【发布时间】:2016-05-02 09:45:35 【问题描述】:

我有一个字符串说"<Node a="<b>">"。我只需要转义数据并将此字符串解析为 XMLWriter 中的节点。因此如何仅转义属性值“

【问题讨论】:

类似<Node a="<b>">? 这不是自动发生的吗?如果您使用 InnerTextValue 属性,它会自动转义。如果您从其他人那里获得了这些数据,请告诉他们他们的数据格式不正确且无法使用 @codran 是的,我需要为字符串制作类似的东西。 @ManfredRadlwimmer 我不是从 XMLNode 访问它,而是它是一个字符串 【参考方案1】:
using (var writer = XmlWriter.Create(Console.Out))

    writer.WriteStartElement("Node");
    writer.WriteAttributeString("a", "<b>");

输出&lt;Node a="&amp;lt;b&amp;gt;" /&gt;


首先你应该解析字符串。由于这不是有效的 xml,因此您不能使用 xml 解析器。你可以试试 htmlAgilityPack。然后你可以用 xml writer 写值。

string s = "<Node a=\"<b>\">";

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);

var node = doc.DocumentNode.FirstChild;
var attr = node.Attributes[0];

using (var writer = XmlWriter.Create(Console.Out))

    writer.WriteStartElement(node.Name);
    writer.WriteAttributeString(attr.Name, attr.Value);

【讨论】:

但我不知道元素名称,它本身是字符串形式的。对于前。字符串是 > 我认为这会起作用,但在多个属性的情况下,我们将不得不改变逻辑。

以上是关于以 XML 格式格式化字符串并删除无效的属性字符的主要内容,如果未能解决你的问题,请参考以下文章

C# 如何读取具有字符级格式的 Excel 单元格 XML 值? (<si> 中的多个 <t> 元素)

格式化 XML 字符串以打印友好的 XML 字符串

java中怎样取出XML格式字符串的节点属性

如何为超过 255 的单元格中的单个字符格式化字体

格式化字符串(删除前导零)

freemarker合并单元格,ifelse标签的使用,null空字符串处理