【问题标题】:How can I get only the outer markup of an XML element?如何仅获取 XML 元素的外部标记?
【发布时间】:2015-05-03 13:10:58
【问题描述】:

如果我有这样的XmlNode

<element attribute="value">
    Content
</element>

我可以得到它的InnerXml ("Content"),但是我怎样才能得到相反的结果呢?也就是说,只是由其开始标签和结束标签分隔的外部标记:

<element attribute="value">

</element>

我想排除内部 xml,所以 XmlNode 类上的 OuterXml 属性将不起作用。

我是否必须通过抓取每一块并将它们格式化为字符串来手动构建它?如果是这样,除了元素的名称、前缀和属性之外,XML 元素还可以附带哪些我应该记住要考虑的属性?

【问题讨论】:

  • 删除所有子节点可能更容易(肯定会产生更正确的 XML),如果无法更改文档,可能需要先复制整个节点。

标签: c# xml parsing outerxml


【解决方案1】:

所以如果我理解正确的话,你想要的只是OuterXml 没有InnerXml。在这种情况下,您可以使用外部 XML 并将内容替换为空字符串。

var external = xml.OuterXml.Replace(xml.InnerText, string.Empty);

【讨论】:

    【解决方案2】:

    如果您不介意更改 xmlnode,可以尝试这两个选项之一:

    foreach(XmlNode child in root.ChildNodes)
        root.RemoveChild(child);
    
    Console.WriteLine(root.OuterXml);
    

    或者

    for (int i=0; i <root.ChildNodes.Count; i++)
      {
        root.RemoveChild(root.ChildNodes[i]);
      }
    

    注意:

    //RemoveAll did not work since it got rid of the xml attributes which you wanted to preserve
    root.RemoveAll();
    

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多