Xml可以有这样的格式
<root>
<child1>
Value1
</child1>
<child2>
<child3>
Value2
</child3>
<child4>
<child5>
Value1
</child5>
</child4>
</child2>
<child6>
Value1
</child6>
</root>
这里Value1写了3次,所以count应该是3。
或者Xml可以有这样的格式:
<root>
<child1 value="Value1" />
<child2 value="Value2"/>
<child3 value="Value1" />
<child4 value="Value1"/>
<child5 value="Value3" />
<child6 value="Value4"/>
</root>
此处Value1的计数为3。
因此Xml可以有任何格式,我想计算xml中的特定关键字计数。
请指导!
编辑:问题不可能是您提到的链接重复,这里我不知道xml的深度,例如它可能有 一个孩子或多个孩子,其中关键字可能会或可能不会出现。 我想遍历所有节点而不知道每个节点的深度**
答案 0 :(得分:1)
XmlDocument readDoc = new XmlDocument();
readDoc.Load(MapPath("your xml path"));
int NoCount = readDoc.SelectNodes("child[. = \"Value1\"]").Count;
这可以检查所有值,(例如,Value1,Valu2等)
答案 1 :(得分:1)
我建议您使用XDocument
。
XDocument doc = XDocument.Load(filename);
var count = doc.Descendants() // flattens the structure
.Where(x=> (!x.HasElements &&((string)x.Value).Trim() == "Value1")
|| (x.Attribute("value") != null
&& x.Attribute("value").Value == "Value1")
) // filter based on value
.Count(); // Take count
选中此Demo
答案 2 :(得分:0)
您可以看到以下代码。我不擅长C#,因此代码是用VB编写的。
Public Class Form1
Private Function SearchKeyword(s_Node As String, s_Keyword As String) As Integer
Dim doc As New XmlDocument()
Dim i_CurPos As Integer = 1
Dim s_InnerText As String
Dim s_File As String = "E:\test.xml"
doc.Load(s_File)
Dim nodelist As XmlNodeList = doc.SelectNodes(s_Node)
For Each node As XmlElement In nodelist
s_InnerText = node.InnerText
For i = 1 To CInt(Len(s_InnerText) / Len(s_Keyword))
If InStr(i_CurPos, s_InnerText, s_Keyword) > 0 Then
SearchKeyword += 1
i_CurPos = InStr(i_CurPos, s_InnerText, s_Keyword) + 1
End If
Next
Next
Return SearchKeyword
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MsgBox(SearchKeyword("root", "Value1"))
End Sub
End Class