【问题标题】:Convert XmlDocument to String将 XmlDocument 转换为字符串
【发布时间】:2011-01-25 07:47:28
【问题描述】:

这是我目前如何将 XMLDocument 转换为 String

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

xmlDoc.WriteTo(xmlTextWriter);

return stringWriter.ToString();

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

例如:

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

上面是预期的 XML。但它会返回

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

我可以做 String.Replace "\" 但这种方法可以吗?有没有什么副作用?如果 XML 本身包含 "\"

会正常工作吗

【问题讨论】:

    标签: c# string escaping quotes xmldocument


    【解决方案1】:

    假设 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# 字符串时才有意义
    【解决方案2】:

    没有任何引号。这只是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 = Encoding.UTF8;
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      作为扩展方法:

      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 在离开代码时无论如何都会被调用。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2019-10-10
          • 2011-01-13
          • 2019-01-05
          • 2015-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多