c# - 删除根节点但保留所有子节点
问题描述
我有这个通过解析的 xml
<ns0:Root xmlns:ns0="http://Core.Schemas.SouCurrencyRate">
<Test>
<CurrencyCode>SEKAUDPMI</CurrencyCode>
<CurrencyType>AUD</CurrencyType>
<CurrencyDate>2019 Juni</CurrencyDate>
<CurrencyRate>6.5656</CurrencyRate>
<RecordCreated>2019-06-30</RecordCreated>
<RecordCreatedSOP>2019-06-01</RecordCreatedSOP>
</Test>
<Test>
<CurrencyCode>SEKBRLPMI</CurrencyCode>
<CurrencyType>BRL</CurrencyType>
<CurrencyDate>2019 Juni</CurrencyDate>
<CurrencyRate>2.4376</CurrencyRate>
<RecordCreated>2019-06-30</RecordCreated>
<RecordCreatedSOP>2019-06-01</RecordCreatedSOP>
</Test>
<Test>
<CurrencyCode>SEKCADPMI</CurrencyCode>
<CurrencyType>CAD</CurrencyType>
<CurrencyDate>2019 Juni</CurrencyDate>
<CurrencyRate>7.0771</CurrencyRate>
<RecordCreated>2019-06-30</RecordCreated>
<RecordCreatedSOP>2019-06-01</RecordCreatedSOP>
</Test>
<Test>
<CurrencyCode>SEKCHFPMI</CurrencyCode>
<CurrencyType>CHF</CurrencyType>
<CurrencyDate>2019 Juni</CurrencyDate>
<CurrencyRate>951.7346</CurrencyRate>
<RecordCreated>2019-06-30</RecordCreated>
<RecordCreatedSOP>2019-06-01</RecordCreatedSOP>
</Test>
</ns0:Root>
xml 有(“测试”)子节点发生了很多时间。我需要做的实际上是删除(" <ns0:Root xmlns:ns0="http://Core.Schemas.SouCurrencyRate"> ")
所以 XML 输出是
<Test>
<CurrencyCode>SEKAUDPMI</CurrencyCode>
<CurrencyType>AUD</CurrencyType>
<CurrencyDate>2019 Juni</CurrencyDate>
<CurrencyRate>6.5656</CurrencyRate>
<RecordCreated>2019-06-30</RecordCreated>
<RecordCreatedSOP>2019-06-01</RecordCreatedSOP>
</Test>
<Test>
<CurrencyCode>SEKBRLPMI</CurrencyCode>
<CurrencyType>BRL</CurrencyType>
<CurrencyDate>2019 Juni</CurrencyDate>
<CurrencyRate>2.4376</CurrencyRate>
<RecordCreated>2019-06-30</RecordCreated>
<RecordCreatedSOP>2019-06-01</RecordCreatedSOP>
</Test>
我试图做的是
System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
xDoc.Load(bizobj.Message.BodyPart.GetOriginalDataStream());
System.Xml.XmlNode xNode = xDoc.FirstChild;
System.Xml.XmlNode xParent = xNode.ParentNode;
System.Xml.XmlNodeList xChilds = xNode.ChildNodes;
xDoc.RemoveChild(xNode);
foreach (System.Xml.XmlNode node in xChilds)
{
xParent.AppendChild(node);
}
但主要问题是返回的 xml 只包含一个孩子(“测试”)而不包含其他孩子。
我也尝试过使用 Linq,我在帖子中找到了这个
XDocument input = XDocument.Load("input.xml");
XElement firstChild = input.Root.Elements().First();
但这会返回相同的内容,并且对我的情况没有帮助。
有人可以帮助我朝着正确的方向前进吗?
谢谢。
解决方案
如果您真的只需要文本字符串,实现此目的的最快方法是在Root
XElement 上使用 XmlReader:
XDocument xDoc = XDocument.Parse(bizobj.Message.BodyPart.GetOriginalDataStream());
XElement root = xDoc.Root;
XmlReader reader = root.CreateReader();
reader.MoveToContent();
string txt = reader.ReadInnerXml();
推荐阅读
- powerbi - Power Query 或 Power BI - 如果单元格为空白,则从所述单元格上方最近的行中复制值
- json - 如何仅在响应中的 onclick 事件后映射 json 列表?
- centos7 - 如何解决 yum update 上的 multilib 问题?
- sublimetext3 - 自动格式化失败,缓冲区未更改:崇高文本
- python - 如何在 SQLAlchemy ORM 中过滤给定字符串长度的列?
- r - RStudio 不会打开一些文本文件
- mongodb - MongoDB和摩卡
- angular - 合并两种不同角度配置的fileReplacement属性
- spring - Hibernate 在多对多关系中创建两个表
- c# - 使用 SelectList 和 DropDownList 传递 TimeRange 对象