xml:
<?xml version="1.0" encoding="UTF-8"?>
<Information>
<Group Title="Abc">
<Item Title="12" Visible="False">xxx</Item>
<Item Title="34">xxx</Item>
</Group>
<Group Title="Def" Visible="False">
<Item Title="56">xxx</Item>
</Group>
<Group Title="Ghi">
<Item Title="78">xxx</Item>
<Item Title="9">xxx</Item>
<Item Title="10" Visible="False">xxx</Item>
</Group>
</Information>
想要洗掉所有組(不僅是第一個或一個!)和所有(不僅是第一個或一個!)Visible=False 的專案,這讓我很生氣......
有了上面的 ex,我想要這個結果:
<?xml version="1.0" encoding="UTF-8"?>
<Information>
<Group Title="Abc">
<Item Title="34">xxx</Item>
</Group>
<Group Title="Ghi">
<Item Title="78">xxx</Item>
<Item Title="9">xxx</Item>
</Group>
</Information>
這首先洗掉但不是全部: x.Descendants("Group").Where(p => p.Attribute("Visible").Value == "False").First().Remove(); x.Descendants("Item").Where(p => p.Attribute("Visible").Value == "False").First().Remove();
對我來說,使用 XmlDocument 還是 XDocument 并不重要,但我嘗試使用 Linq ...
感謝您的幫助/想法......必須有很多選擇,但是......一個不錯的選擇:-)
uj5u.com熱心網友回復:
請嘗試以下解決方案。
它基于 LINQ to XML。
作為替代解決方案,通過 XSLT 很容易實作。
輸入 XML 檔案
<?xml version="1.0" encoding="UTF-8"?>
<Information>
<Group Title="Abc">
<Item Title="12" Visible="False">xxx</Item>
<Item Title="34">xxx</Item>
</Group>
<Group Title="Def" Visible="False">
<Item Title="56">xxx</Item>
</Group>
<Group Title="Ghi">
<Item Title="78">xxx</Item>
<Item Title="9">xxx</Item>
<Item Title="10" Visible="False">xxx</Item>
</Group>
<Group Title="Def" Visible="False">
<Item Title="56">xxx</Item>
</Group>
</Information>
C#
void Main()
{
const string inputXML = @"e:\Temp\MortenFredsgaardRasmussen.xml";
const string outputXML = @"e:\Temp\MortenFredsgaardRasmussen_output.xml";
XDocument xdoc = XDocument.Load(inputXML);
xdoc.Descendants("Group")
.Where(x => x.Attribute("Visible") != null)
.Where(x => x.Attribute("Visible").Value.Equals("False"))
.ToList()
.ForEach(x => x.Remove());
xdoc.Save(outputXML);
}
輸出 XML
<Information>
<Group Title="Abc">
<Item Title="12" Visible="False">xxx</Item>
<Item Title="34">xxx</Item>
</Group>
<Group Title="Ghi">
<Item Title="78">xxx</Item>
<Item Title="9">xxx</Item>
<Item Title="10" Visible="False">xxx</Item>
</Group>
</Information>
uj5u.com熱心網友回復:
以下示例使用XmlDocument洗掉所需專案:
var doc = new XmlDocument();
doc.Load(@"C:\Temp\doc.xml"));
var nav = doc.CreateNavigator();
var nodes = nav.Evaluate(nav.Compile("//Group[@Visible='False'] | //Item[@Visible='False']"));
if (nodes is System.Xml.XPath.XPathNodeIterator iterator)
{
var toDelete = new List<XPathNavigator>();
foreach (XPathNavigator item in iterator)
toDelete.Add(item);
foreach (XPathNavigator item in toDelete)
item.DeleteSelf();
doc.Save(@"C:\Temp\result.xml");
}
結果是:
<?xml version="1.0" encoding="UTF-8"?>
<Information>
<Group Title="Abc">
<Item Title="34">xxx</Item>
</Group>
<Group Title="Ghi">
<Item Title="78">xxx</Item>
<Item Title="9">xxx</Item>
</Group>
</Information>
有關其他資訊,請參閱:
使用 Visual C# 通過 XPathNavigator 類導航 XML 檔案
XPath 語法
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401044.html
標籤:xml 林克 linq-to-xml xml文档
