是否有方法从C#中的XmlDocument中获取缩进文本?我的意思是,如果有一个内置方法。 (如果没有更简单的解决方案,我正在考虑以递归方式解析XML节点并提取每个节点的内部文本,同时将递归级别保持为缩进(使用自定义字符))。
e.g。
<Element>
<Children>
<Element>
<Messages>
<Message type="0">
<Text>[MutationEngine:CraSyncMutationEngine]</Text>
</Message>
</Messages>
<Children>
<Element>
<Messages>
<Message type="0">
<Text>[Stage:'StageLoad']</Text>
</Message>
<Message type="0">
<Text>[Stage:'StageMergeWithPi']</Text>
</Message>
<Message type="0">
<Text>[Stage:'StageSaveRelationImage']</Text>
</Message>
</Messages>
<Children>
<Element>
<Messages>
<Message type="0">
<Text>[PreValidate]</Text>
</Message>
</Messages>
</Element>
<Element>
<Messages>
<Message type="0">
<Text>[Action:'LoadPersistedInput']</Text>
</Message>
</Messages>
</Element>
</Children>
</Element>
</Children>
</Element>
</Children>
</Element>
应该成为:
-----[MutationEngine:CraSyncMutationEngine]
-------[Stage:'StageLoad']
-------[Stage:'StageMergeWithPi']
-------[Stage:'StageSaveRelationImage']
---------[PreValidate]
---------[Action:'LoadPersistedInput']
假设我们使用-
字符进行缩进。 C#代码:
var xmlDoc = new XmlDocument { PreserveWhitespace = true };
xmlDoc.LoadXml(log);
var logInnerText = xmlDoc.InnerText;
非常感谢任何帮助!
答案 0 :(得分:1)
这是一种可能的方式:
var doc = new XmlDocument();
.....
//select all elements having non empty inner text
var nodesHavingInnerText = doc.DocumentElement
.SelectNodes("//*[normalize-space(text())]");
var result = "";
foreach (XmlNode node in nodesHavingInnerText)
{
//put "-" repeated as many as current node's level in the XML doc
result += string.Concat(Enumerable.Repeat("-", GetLevel(node)))
+
node.InnerText
+
Environment.NewLine;
}
GetLevel()
函数定义如下(改编自@ Slak&#39;对另一个问题的回答:Return node level of hierarchical xml):
public int GetLevel(XmlNode node)
{
if (node.ParentNode == null) return 0;
return 1 + GetLevel(node.ParentNode);
}
<强> [.NET fiddle demo] 强>
答案 1 :(得分:0)
我并不完全清楚你打算做什么,但我希望这会有所帮助
string result=xmlDoc.Element("Element")
.Element("Children")
.Element("Element")
.Element("Messages")
.Element(Message)
.Element("Text").Value;
如果您想让节点的所有孩子都使用Elements
而不是Element
,那么您将获得XElement
类型的列表。