【问题标题】:C# formatting XML document output with namespacesC# 使用命名空间格式化 XML 文档输出
【发布时间】:2015-07-29 20:54:07
【问题描述】:

我有这样的 Web 服务序列化创建的 XmlDocument(标题未显示):

<request xmlns="a">
    <value1>1</value1>
    <value2>2</value2>
</request>

有什么方法可以像这样获取 XmlDocument 的字符串表示:

<ns:request xmlns:ns="a">
    <ns:value1>1</ns:value1>
    <ns:value2>2</ns:value2>
</ns:request>

无需手动迭代和格式化?

更新:原因是,许多目标系统之一需要这种格式,而其他系统则不需要。我知道,我可以将 Razor 模板和 WebRequest 用于该系统,但我正在尝试找到通用解决方案,在这种情况下使用 IClientMessageInspector。

【问题讨论】:

  • 使用 Regex 类?
  • 并非如此 - 在任何 XML API 中都没有添加前缀的神奇功能......(这真的是错误的事情:))。请注意,代码有些琐碎,但听起来您已经知道如何编写它。
  • 也许你可以多解释一下。一旦您从服务中获取 XML,您似乎正在寻找转换 XML,并且您想使用 C#。是对的吗?如果是这样,为什么使用 Regex 类不起作用?
  • @Melanie 你不能用正则表达式解析 xml。

标签: c# xml namespaces formatting


【解决方案1】:

如果您愿意使用XDocument API 而不是XmlDocument,您可以这样做:

XDocument xDoc = XDocument.Parse( @"<request xmlns=""a"">
                                          <value1>1</value1>
                                          <value2>2</value2>
                                   </request>");     

xDoc.Root.ReplaceAttributes(new XAttribute(XNamespace.Xmlns + "ns", "a"));
string xmlOut = xDoc.ToString();

产生这个输出:

<ns:request xmlns:ns="a">
   <ns:value1>1</ns:value1>
   <ns:value2>2</ns:value2>
</ns:request>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多