我目前正在尝试用 C# 扁平化一个深度结构化的 XML 文档,以便将元素的每个值都转换为属性。
XML结构如下:
<members>
<member xmlns="mynamespace" id="1" status="1">
<sensitiveData>
<notes/>
<url>someurl</url>
<altUrl/>
<date1>somedate</date1>
<date2>someotherdate</date2>
<description>some description</description>
<tags/>
<category>some category</category>
</sensitiveData>
<contacts>
<contact contactId="1">
<contactPerson>some contact person</contactPerson>
<phone/>
<mobile>mobile number</mobile>
<email>some@email.com</email>
</contact>
</contacts>
</member>
</members>
我希望它看起来像这样:
<members>
<member xmlns="mynamespace" id="1" status="1" notes="" url="someurl" altUrl="" date1="somedate" date2="someotherdate" description="some description" tags="" category="some category" contactId="1" contactPerson="some contact person" phone="" mobile="mobile number" email="some@email.com" />
</members>
我可以只解析元素名称及其属性,但由于此 XML 来 self 无法控制的 Web 服务,我必须创建某种动态解析器来将其展平为结构 在某些时候改变。
值得注意的是,XML 结构作为来自网络服务的 XElement。
有没有人以前尝试过这样做并且会有助于分享如何做? :-) 将不胜感激!
非常感谢。
祝一切顺利
博
最佳答案
试试这个:
var doc = XDocument.Parse(@"<members>...</members>");
var result = new XDocument(
new XElement(doc.Root.Name,
from x in doc.Root.Elements()
select new XElement(x.Name,
from y in x.Descendants()
where !y.HasElements
select new XAttribute(y.Name.LocalName, y.Value))));
结果:
<members>
<member notes="" url="someurl" altUrl="" date1="somedate" date2="someotherdate" description="some description" tags="" category="some category" contactPerson="some contact person" phone="" mobile="mobile number" email="some@email.com" xmlns="mynamespace" />
</members>
关于c# - 展平 XML 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9215273/