Как я могу проверить, существует ли узел в файле XML? - PullRequest
1 голос
/ 17 марта 2009

Как проверить, существует ли узел в файле XML, а также подсчитать количество узлов?

У меня есть один XML-файл для примера:

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

Ответы [ 10 ]

6 голосов
/ 17 марта 2009

С linq 2 xml в c #:

var employee = XElement.Load(someStream);
var emp = employee.Element("Emp");
if( emp != null )
{
   int count = emp.Elements("Name").Count();
}
2 голосов
/ 18 декабря 2012
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");

}
2 голосов
/ 17 марта 2009

Я предполагаю, что вы используете XSL для преобразования этого документа, тогда я предположил бы, что переменная даст лучшую функциональность. Вы бы использовали это:

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

Это даст вам количество узлов Name, и вы можете изменить его на что угодно. Очевидно, что если он равен нулю, то его нет, иначе это число.

1 голос
/ 19 марта 2009

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}
1 голос
/ 17 марта 2009

Если вы программируете на Java, вам следует обратить внимание на две связанные библиотеки.

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

Я бы посмотрел на Dom4j 2.0 сейчас, так как он получил поддержку дженериков, XPath и теперь имеет лучшую поддержку высокого уровня. Dom4j, я думаю, был разветвлен от более раннего jdom.

В любом из них вы можете читать XML из файла, URL, строки и т. Д., Анализировать его и проверять наличие узлов всего за несколько строк кода.

0 голосов
/ 07 мая 2010

Если вы используете XSLT-преобразование, просто попробуйте это:

<- Узел существует ->

</ xsl: когда>

<- Узел не существует ->

</ xsl: в противном случае>

</ xsl: выберите>

0 голосов
/ 11 мая 2009
int nNodeExistCount = xmlOuput.GetElementsByTagName("NodeName").Count;

if (nNodeExistCount>0)
{
    Response.write(" The NodeName exists!");
}
else
{
    Response.write(" The NodeName does not exist!");
}
0 голосов
/ 17 марта 2009

getElementsByTagName["tagname"] также является методом DOM, который можно использовать для получения узла. Если узел не совпадает, метод с возвращаемым нулем.

0 голосов
/ 17 марта 2009

В качестве альтернативы 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.

0 голосов
/ 17 марта 2009

Здесь есть как минимум 4 узла, при условии, что вашему </Emp> соответствует открывающий тег <Emp>: <Emp>, <Name>, ID, и строка " D " будет представлена ​​в виде узлы. Из вашего вопроса не ясно, действительно ли вы хотите сосчитать всех из них. Я также не уверен, хотите ли вы определить существование определенного из них.

В конечном счете, XPath, вероятно, то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...