如何遍历 XmlDocument 并返回 csv
本文关键字:XmlDocument 返回 csv 遍历 何遍历 | 更新日期: 2023-09-27 17:57:13
我正在尝试遍历XmlDocument
对象并返回合理的csv。
我能够使用递归遍历所有节点
private StringBuilder findAllnodes(XmlNode node, StringBuilder buf) {
foreach (XmlNode n in node.ChildNodes) {
findAllnodes(n, buf);
if (n.NodeType == XmlNodeType.Text) {
buf.AppendFormat("{0}",n.InnerText.Trim());
}
else {
buf.AppendFormat("{0}, {1}", n.Name, n.InnerText.Trim());
}
}
return buf;
}
并将值写入字符串,但它只是没有正确出来。
我尝试解析的 XML 字符串有 n 个键值对(可能会很长),并且可能有多个重复的部分。 下面是一个示例:
有什么快速简便的东西吗?我真的很希望有某种原生库,因为我觉得这将是一项非常常见的补救任务。
更新:示例 XML
<?xml version="1.0" encoding="UTF-8"?>
<soap:Body>
<perfOCRResp xmlns="http://com.speedMonkey.getthatmoney.pitt.edu">
<perfOCRResults>
<status>SUCCESS</status>
<clientID>testApp</clientID>
<outputs>
<ocrOut>
<clientID>testApp</clientID>
<isSuccess>true</isSuccess>
<message>SUCESS</message>
<classificTemp>monkeyTemp</classificTemp>
<recogVals>
<KeyValue>
<key>tempCode</key>
<value>NLN000001</value>
</KeyValue>
<KeyValue>
<key>tempName</key>
<value>monkeyNote</value>
</KeyValue>
<KeyValue>
<key>tempCode</key>
<value>NLN000001</value>
</KeyValue>
<KeyValue>
<key>Borrower</key>
<value>Monkey See</value>
</KeyValue>
<KeyValue>
<key>solute</key>
<value>MonkeyDue</value>
</KeyValue>
<KeyValue>
<key>whatsThis</key>
<value>who cares</value>
</KeyValue>
<KeyValue>
<key>solute</key>
<value>NLN000001</value>
</KeyValue>
<KeyValue>
<key>imageID</key>
<value>thatImage</value>
</KeyValue>
</recogVals>
</ocrOut>
<outputs>
</perfOCRResults>
</perfOCRResp>
</soap:Body
OCROUT 可以重复多次。 我不知道你是否能说出来,但里面可能有不确定数量的键值对。 这就是我认为递归遍历可能是最佳选择的原因之一。 但就像我说的,我正在到达所有节点,但它只是丑陋且没有顺序。 不是有史以来最好的CSV。 希望有一个简单的库,就像 JSON 一样。
我肯定会考虑用LINQ-to-XML来做到这一点。这要简单得多。代码如下:
var ns = XNamespace.Get("http://com.speedMonkey.getthatmoney.pitt.edu");
var csv =
String.Join(Environment.NewLine,
doc
.Descendants(ns + "KeyValue")
.Select(e => String.Format("{0},{1}",
e.Element(ns + "key").Value.Trim(),
e.Element(ns + "value").Value.Trim())));
我得到的结果是:
tempCode,NLN000001
tempName,monkeyNote
tempCode,NLN000001
Borrower,Monkey See
solute,MonkeyDue
whatsThis,who cares
solute,NLN000001
imageID,thatImage