如何检查XML文件中是否存在节点?

时间:2009-03-17 04:16:56

标签: xml

如何检查XML文件中是否存在节点,还是计算节点数?

我有一个XML文件示例:

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

10 个答案:

答案 0 :(得分:6)

在c#中使用linq 2 xml:

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

答案 1 :(得分:2)

我假设您正在使用XSL来转换此文档,然后我会假设变量将提供最佳功能。你会用这个:

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

这将为您提供Name的节点数,您可以将其更改为您想要的任何内容。显然,如果它为零则没有,否则就是计数。

答案 2 :(得分: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");

}

答案 3 :(得分:1)

如果您使用Java编程,则应该查看两个相关的库。

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

我现在看看Dom4j 2.0,因为它支持泛型,XPath,现在有更好的高级支持。我认为Dom4j是从早期的jdom分叉出来的。

您可以从文件,URL,字符串等中读取XML,解析它并检查节点 只需几行代码。

答案 4 :(得分:1)

LINQ很棒。但是,如果您遇到使用.NET 2.x的系统,您可能必须使用“旧”(XPath)方式(其中xmlFragment是您上面的XML字符串):

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

答案 5 :(得分:0)

此处至少有4个节点,假设您的</Emp>与开放式<Emp>代码相匹配:<Emp><Name>ID,以及字符串" D "都将表示为节点。从您的问题中不清楚您是否真的想要计算所有这些。我也不确定你是否想要确定其中一个特定的存在。

但最终,XPath可能正是您所寻找的。

答案 6 :(得分:0)

作为XPath的替代方案,许多支持XML DOM的语言允许您在XML文档上调用方法,如:

GetAllNodesWithTagName(string tagname);

您查看它是否存在的代码看起来像这样(用伪代码编写):

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很好,但它更适合以有趣和复杂的方式轻松导航XML文档。这段代码比相应的XPath代码更简单。

答案 7 :(得分:0)

getElementsByTagName["tagname"]也是一种可用于获取节点的DOM方法。如果节点不匹配,则返回null的方法。

答案 8 :(得分:0)

int nNodeExistCount = xmlOuput.GetElementsByTagName("NodeName").Count;

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

答案 9 :(得分:0)

如果您正在使用XSLT转换,请尝试:

  

&LT; XSL:选择&GT;

     

&LT; xsl:when test =“// Employee / Emp”&gt;

     

&LT; - 节点存在 - &gt;

     

&LT; / XSL:当&GT;

     

&LT; XSL:否则&GT;

     

&LT; --Node不存在 - &gt;

     

&LT; / XSL:否则&GT;

     

&LT; / XSL:选择&GT;