2009-03-17 2 views
1

Wie kann ich überprüfen, ob ein Knoten in einer XML-Datei existiert, und auch die Anzahl der Knoten zählen?Wie kann ich prüfen, ob ein Knoten in einer XML-Datei existiert?

Ich habe eine XML-Datei für ein Beispiel:

<Employee> 
    <Emp> 
    <Name id="1"> A  </Name> 
    <Name id="2"> C  </Name> 
    <Name id="3"> D  </Name> 
    </Emp> 
    </Employee> 
+5

Für welche Programmiersprache möchten Sie die Lösung? Wenn Sie dies nicht angeben, wird jemand für diese Frage eine negative Bewertung abgeben, da sie unvollständig ist. –

Antwort

0

Es gibt mindestens vier Knoten hier, unter der Annahme, dass Ihre </Emp> durch eine Öffnung <Emp> Tag abgestimmt ist: <Emp>, <Name>, ID und die Zeichenfolge " D " würden alle als Knoten dargestellt werden. Es ist nicht klar aus Ihrer Frage, ob Sie wirklich alle von diesen zählen möchten. Ich bin mir auch nicht sicher, ob Sie die Existenz eines bestimmten von ihnen bestimmen wollen.

Schließlich ist XPath wahrscheinlich, was Sie suchen.

0

Als Alternative zu XPath, viele Sprachen, die XML-DOM-Unterstützung haben können Sie wie eine Methode auf ein XML-Dokument nennen:

GetAllNodesWithTagName(string tagname); 

Ihren Code, um zu sehen, ob es so etwas wie dies aussehen würde, existiert (geschrieben in Pseudo-Code):

int num_nodes = 0; 
string node_name = "Name"; // want to find all of the <Name> tags 
XMLNode [] nodes = GetNodesWithTagName(node_name); 
num_nodes = nodes.Length; 

XPath ist gut, aber es ist besser geeignet für ein XML-Dokument in interessanter und komplexen Weise leicht zu navigieren. Dieser Code wird etwas einfacher als der entsprechende XPath-Code sein.

6

Mit linq 2 xml in C#:

var employee = XElement.Load(someStream); 
var emp = employee.Element("Emp"); 
if(emp != null) 
{ 
    int count = emp.Elements("Name").Count(); 
} 
0

getElementsByTagName["tagname"] ist auch eine DOM Verfahren, das verwendet werden kann, einen Knoten zu erhalten. Wenn der Knoten nicht übereinstimmt, geben Sie mit null zurück.

1

Wenn Sie in Java programmieren, gibt es zwei verwandte Bibliotheken, die Sie sich anschauen sollten.

JDOM - http://www.jdom.org/ DOM4J - http://www.dom4j.org/

ich DOM4J 2.0 jetzt aussehen würde, da es Unterstützung für Generika bekommen hat, XPath, und jetzt hat einige bessere hohe Unterstützung. Dom4j Ich denke, es wurde vom früheren jdom gespalten.

In beiden können Sie XML aus einer Datei, URL, Zeichenfolge usw. lesen, analysieren und Knoten in nur wenigen Zeilen Code suchen.

2

Ich gehe davon aus, dass Sie XSL verwenden, um dieses Dokument zu transformieren, dann würde ich annehmen, dass eine Variable die beste Funktionalität geben würde. Sie würden diese verwenden:

<xsl:variable name="Name_Count" select="count(//Name)"/> 

Dies gibt Ihnen die Anzahl der Knoten von Name und Sie können, dass Sie möchten nichts ändern. Offensichtlich, wenn es Null ist, dann gibt es keine, sonst ist es die Zählung.

1

LINQ ist großartig. Aber für den Fall, dass Sie auf einem System mit .NET 2 feststecken.x Sie vielleicht haben sie die "alte" zu tun (XPath) Art und Weise (wo xmlfragment Ihre XML-String ist oben):

XPathDocument doc = new XPathDocument(new StringReader(xmlFragment)); 
XPathNavigator n = doc.CreateNavigator().SelectSingleNode("//Name[@id='4']"); 
if(n==null){//Node does not exist} 
0
int nNodeExistCount = xmlOuput.GetElementsByTagName("NodeName").Count; 

if (nNodeExistCount>0) 
{ 
    Response.write(" The NodeName exists!"); 
} 
else 
{ 
    Response.write(" The NodeName does not exist!"); 
} 
0

Wenn Sie XSLT-Transformation sind nur mit trythis:

< xsl: choose>

< xsl: when test = "// Angestellte/Emp">

< - Knoten existiert ->

</xsl: when>

< xsl: otherwise>

< --node nicht existiert ->

</xsl: otherwise >

</xsl: choose>

2
XmlDocument _xmlDoc = new XmlDocument(); 

_xmlDoc.Load(Server.MapPath("~/XMLFile.xml")); 

XmlNode _node = _xmlDoc.SelectSingleNode("Employee/Emp"); 

if (_node != null) 

{ 

    XmlNodeList _nodeList = _node.SelectNodes("Name"); 

    Response.Write(_nodeList.Count); 
} 

else 

{ 

    Response.Write("Emp node doesnot exist"); 

} 
Verwandte Themen