如何检查XML文件中是否存在节点,还是计算节点数?
我有一个XML文件示例:
<Employee>
<Emp>
<Name id="1"> A </Name>
<Name id="2"> C </Name>
<Name id="3"> D </Name>
</Emp>
</Employee>
答案 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可能正是您所寻找的。 p>
答案 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;