我正在尝试从XML中删除名为<source file="..." />
的特定元素,以便我可以比较它们。
<?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();
任何人都有任何关于我做错事的线索。
答案 0 :(得分:3)
您没有考虑 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();