【发布时间】:2019-06-18 06:35:05
【问题描述】:
我有这个通过
解析的 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();
但这会返回相同的结果,并且对我的情况没有帮助。
有人可以帮助我朝正确的方向前进吗?
谢谢。
【问题讨论】:
-
您描述的结果不是有效的 Xml - 您需要一个元素作为文档的根。我的猜测:可能是您的问题在于处理命名空间前缀
ns0? -
@Filburt 我不需要它是一个有效的 XML,我只需要输出我想要的结果。
-
你不能使用
XDocument来表示格式错误的 XML。为什么不直接返回List<XElement>,然后单独序列化每个?
标签: c# xml linq-to-xml element xmldocument