C# linq XML DeepCompare 和标签删除

标签 c# .net xml linq

我正在尝试删除名为 <source file="..." /> 的特定元素来 self 的 XML,以便我可以比较它们。

<?xml version="1.0" encoding="utf-8"?>
<!--XML document generated using OCR technology from Nuance Communications, Inc.-->
<document xmlns="http://www.nuance.com/omnipage/xml/ssdoc-schema3.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <page ocr-vers="OmniPageCSDK16" app-vers="PaperVision Capture">
    <description backColor="d5d3d4">
      <source file="D:\Users\user\AppData\Roaming\OCR\\PVCPROCESSING_8\a9cfb6f2-b170-46f6-a00a-2f1557baee26.tmp" dpix="150" dpiy="150" sizex="1279" sizey="1652" />
      <theoreticalPage size="Letter" marginLeft="1700" marginTop="154" marginRight="739" marginBottom="3805" offsetX="-500" offsetY="-20" width="12240" height="15840" />
    </description>

这些方法我都试过了,没有效果。它编译得很好,但不起作用

doc1.Root.Element("document").Descendants().Where(e=>e.Name == "source").Remove();

doc1.Root.Element("document").Elements().Where(e=>e.Name == "source").Remove();

doc2.Root.Elements().Where(e=>e.Name == "source").Remove(); 

doc1.Descendants("document").Where(e=>e.Name == "source").Remove();

任何人都知道我做错了什么。

最佳答案

您没有考虑xmlnamespace

查看这个简单的示例

string xml1 = "<document> </document>";
var elem1 = XDocument.Parse(xml1).Element("document"); //elem1 contains document

现在插入一个命名空间http://aaa(如您的情况)

string xml2 = "<document xmlns=\"http://aaa\"> </document>";
var elem2 = XDocument.Parse(xml2).Element("document"); //elem2 is null

elem2 现在为空。

如何解决?使用XNamespace

XNamespace ns = "http://aaa";
var elem3 = XDocument.Parse(xml2).Element(ns + "document"); //elem3 contains document

最后,一个更复杂的示例(查看 XmlNamespace 的用法):

string xml4 = "<document xmlns=\"http://aaa\"> <subitem> <subsubitem> </subsubitem> </subitem> </document>";
XNamespace ns = "http://aaa";
var elems4 = XDocument.Parse(xml4).Element(ns + "document").Descendants(ns + "subsubitem")
            .ToList(); 

关于C# linq XML DeepCompare 和标签删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46006629/

相关文章:

不滚动的Android ListView?

c# mvc pdf 下载在 android chrome 上失败

c# - 具有子列表属性映射问题的自动映射器

c# - 如何在 Xamarin.iOS/Mono 的任务中捕获异常?

c# - 当 ToString() 具有协作对象时,为什么 WPF 数据绑定(bind)不显示文本?

java - 如何使用 Java 将 'prepared' 文本文件转换为 XML 文件?随后将在 SAX 中使用

c# - 从 XmlElement 创建 XPathDocument

c# - 确定从强类型 View 接收数据的操作方法参数的类型

c# - 已成功注册 COM DLL - 一个可访问,一个不可访问

C#:在两个不同的定界符之间获取子字符串