【发布时间】:2018-12-11 17:53:19
【问题描述】:
我试图找到一种“优雅的方式”来添加/修改从 DataTable.WriteXML 生成的 XML 中的一些 XML 元素
<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<Documents>
<XMLelement1>Value1</XMLelement1>
<XMLelement2>Value2</XMLelement2>
<XMLelement3>Value3</XMLelement3>
</Documents>
</DocumentElement>
但我想要这样的东西
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SomeGroupElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SomeGroupElement2 XMLElementA="ABCD" XMLElementB="123" XMLElementC="XYZ" XMLElementD="1">
<SomeGroupElement2 XMLElementZ="KLM">
<Grouping>
<XMLelement1>Value1</XMLelement1>
<XMLelement2>Value2</XMLelement2>
<XMLelement3>Value3</XMLelement3>
</Grouping>
</SomeGroupElement2>
</SomeGroupElement>
我已经使用 XSLT 进行了一些测试并即时添加元素......并且还通过使用 GetXML 来获取字符串并将其作为字符串进行操作,我觉得应该有一些更好的方法。
附言XMLelement1、XMLelement2、XMLelement3 是 DataTable/ 的字段及其值。
P.S.2 我很确定我没有正确使用 XML 术语,对此感到抱歉。
【问题讨论】:
-
你试过LINQ to XML吗?
-
首先,您需要将 XML 加载到 XElement:
using (var ms = new MemoryStream()) { dataTable.WriteXml(ms); ms.Position = 0L; var xml = XElement.Load(ms); } -
我已经看到了这种将 XML 加载到 MemoryStream 中以避免 I/O 的技术,但我还没有找到“之后”
-
您可以使用this answer 或this one 中的静态方法将
DataTable直接序列化为XElement,然后使用LINQ to XML 添加其他元素。这避免了任何字符串操作或解析。