![](/img/trans.png)
[英]How to get InnerText and InnerXml of a Node from XmlDocument?
[英]How to get indented InnerText from an XmlDocument?
有沒有一種方法可以從C#中的XmlDocument獲取縮進的文本? 我的意思是,如果有內置方法。 (如果沒有更簡單的解決方案,我正在考慮遞歸解析XML節點並提取每個節點的內部文本,同時保持遞歸級別作為縮進(具有自定義字符))。
例如
<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;
任何幫助是極大的贊賞!
這是一種可能的方式:
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()
函數的定義如下(根據GetLevel()
對另一個問題的回答: 返回分層xml的節點級別 ):
public int GetLevel(XmlNode node)
{
if (node.ParentNode == null) return 0;
return 1 + GetLevel(node.ParentNode);
}
[ .NET小提琴演示 ]
我不會完全理解您的打算,但是我希望這會有所幫助
string result=xmlDoc.Element("Element")
.Element("Children")
.Element("Element")
.Element("Messages")
.Element(Message)
.Element("Text").Value;
如果要獲取節點的所有子節點,請使用Elements
而不是Element
,您將獲得XElement
類型的列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.