【问题标题】:Edit XML before comparing with another XML在与另一个 XML 比较之前编辑 XML
【发布时间】:2016-06-28 06:53:55
【问题描述】:

我正在比较两个 XML 字符串,但想在比较它们之前删除一些特定的 attribute 元素。

我想删除<orderby> attribute 元素和这些标签中的所有数据

XML 1:

<query>
<selecttables>
  <field>
    <tablerscd>1014</tablerscd>
    <tablename> OEM IHS Engines</tablename>
   </field>
   <orderby>
   </orderby>
</selecttables>
</query>

XML 2:

<query>
<selecttables>
   <field>
     <tablerscd>1014</tablerscd>
     <tablename> OEM IHS Engines</tablename>
   </field>
   <orderby>
      <columnrscd>1228</columnrscd>
      <columnrscd>1229</columnrscd>
   </orderby>
  </selecttables>
</query>

我的问题是:

如何在比较它们之前删除&lt;orderby&gt; 属性和这些标签中的所有数据。

【问题讨论】:

  • 您的 xml 无效。 没有结束标记。
  • @PhilB 我复制了特定部分,xml 有效性不是问题
  • &lt;orderby&gt; 是一个元素,而不是一个属性。
  • 拥有无效的 xml 会严重限制您的选择,如果这确实不是 xml,那么您应该从问题中删除 xml 引用。
  • @PhilB 我已经更正了 xml,现在您可以回答我的问题了吗?

标签: c# xml string split


【解决方案1】:

类似于my own question about removing comments,您可以这样做:

// load your Xml string into an XDocument
var xml = XDocument.Parse(yourxmlstringhere);

foreach (var node in xml.SelectNodes("//orderby").ToList())
{
    node.ParentNode.RemoveChild(node);
}

这将找到所有orderbyelements,导航到它们的父元素并从那里删除它们。

我采纳了Anthony 的这个答案,他指出在删除之前创建List 会更安全。

【讨论】:

    【解决方案2】:

    您可以使用 LINQ to XML 非常简单地做到这一点:

    var doc = XDocument.Parse(xml);
    
    doc.Descendants("orderby").Remove();
    

    请参阅this fiddle 以获取演示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多