ChatGPT解决这个技术问题 Extra ChatGPT

将 XmlDocument 转换为字符串

这是我目前将 XMLDocument 转换为 String 的方式

StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);

xmlDoc.WriteTo(xmlTextWriter);

return stringWriter.ToString();

这种方法的问题是,如果我有 " ((quotes) 我在属性中拥有) 它会转义它们。

例如:

<Campaign name="ABC">
</Campaign>

以上是预期的 XML。但它返回

<Campaign name=\"ABC\">
</Campaign>

我可以做 String.Replace "\" 但这种方法可以吗?有没有什么副作用?如果 XML 本身包含“\”,它会正常工作吗


C
Chris Moutray

假设 xmlDoc 是一个 XmlDocument 对象 xmlDoc.OuterXml 有什么问题?

return xmlDoc.OuterXml;

OuterXml property 返回 xml 的字符串版本。


好吧,你是对的。我首先尝试过,但是当我在调试器中看到引号时。我认为是因为 OuterXml 并尝试使用 StringWriter 方法。但我错了,引号只在调试器中。所以我将只使用 OuterXml。谢谢
为我工作!只需对 xmlDoc 进行空检查!返回 xmlDoc == null ? “xmlDoc 为空”:xmlDoc.OuterXml;
@SarjanWebDev 如果您认为您的对象可能为空,那么空检查不言而喻,并且对于这里的每个答案;并且真的对于与 C# 中的对象的每次交互 - 就个人而言,我尝试确保始终构造对象,这样我就不必到处使用空检查来使代码膨胀……我想这仅取决于您的代码库.. .
(y) 但 OuterXml 不包含声明性标记
@hazjack 如果您想要声明性标签,则使用 XmlDeclaration 类 msdn.microsoft.com/en-us/library/system.xml.xmldeclaration.aspx - 如果您想将其写入文件,然后使用在您的 XmlDocument 实例 msdn.microsoft.com/en-us/library/dw229a22.aspx 上找到的保存方法 - 对我来说,声明性标签才有意义如果你写的是文件而不是 C# 字符串
B
Brian

没有任何引号。这只是VS调试器。尝试打印到控制台或保存到文件,你会看到。附带说明:始终处理一次性物品:

using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
    xmlDoc.WriteTo(xmlTextWriter);
    xmlTextWriter.Flush();
    return stringWriter.GetStringBuilder().ToString();
}

+1 用于修复代码以使用 using 块而不是 XmlTextWriter
值得注意的是(正如这里的注释中提到的:msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx),在调用 XmlWriter 的 Close 方法之前不会写入元素和属性。
其中一些可能会立即写入。这取决于缓冲。无论如何,我添加了对 Flush 的调用,尽管对 Close 的调用或只是关闭 xmlTextWriter using 块也可以实现相同的效果。
要使 xml 更漂亮,请将此设置对象传递给 XmlWriter.Create: XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = " "; settings.Encoding = 编码.UTF8;
W
Whyser

如果您使用 XmlDocumentWindows.Data.Xml.Dom.XmlDocument 版本(例如在 UWP 应用程序中使用),您可以使用 yourXmlDocument.GetXml() 将 XML 作为字符串获取。


S
SixOThree

作为扩展方法:

public static class Extensions
{
    public static string AsString(this XmlDocument xmlDoc)
    {
        using (StringWriter sw = new StringWriter())
        {
            using (XmlTextWriter tx = new XmlTextWriter(sw))
            {
                xmlDoc.WriteTo(tx);
                string strXmlText = sw.ToString();
                return strXmlText;
            }
        }
    }
}

现在简单地使用:

yourXmlDoc.AsString()

此示例未能在两个写入器上调用 Dispose。
尽管返回,但在留下代码时仍会调用@Joel Mueller Dispose。
s
saluce

" 在调试器中显示为 \",但字符串中的数据是正确的,无需替换任何内容。尝试将您的字符串转储到文件中,您会注意到该字符串是正确的。


ا
احمد بندارى

您可以使用 xmlDoc.InnerXml 属性来获取字符串中的 xml