以 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 格式格式化字符串并删除无效的属性字符的主要内容,如果未能解决你的问题,请参考以下文章