2009-03-17 18 views
1

ノードがXMLファイルに存在するかどうかを確認したり、ノード数をカウントする方法はありますか?ノードがXMLファイルに存在するかどうかを確認する方法はありますか?

は、私は、例えば1つのXMLファイルを持っている:

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

どのようなプログラミング言語で解決したいですか?あなたがそれを指定しない限り、誰かが不完全なので、この質問のネガティブに投票します。 –

答えて

0

少なくとも4つのノードがあなたの</Emp>は、開口部により<Emp>タグに一致していることを仮定して、ここにあります:<Emp><Name>IDを、文字列" D "すべてがノードとして表されます。あなたの質問から実際にすべてを数えたいかどうかは明らかではありません。私はあなたが特定のものの存在を判断したいかどうかも分かりません。

最終的にXPathはおそらくあなたが探しているものです。それが存在するかどうかを確認するためにあなたのコードは、(次のようになります

GetAllNodesWithTagName(string tagname); 

:似たXPathの代替案として

0

、XMLのDOMをサポートしている多くの言語を使用すると、XMLドキュメント上のメソッドを呼び出すことができます擬似コードで書かれています):

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は面白いですが、XPathは面白く複雑な方法で簡単にナビゲートするのに適しています。このコードは、対応するXPathコードよりも少し簡単です。 C#でLINQ 2 XMLを

6

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

getElementsByTagName["tagname"]は、ノードを取得するために使用することができるDOM方法です。ノードが一致しない場合、メソッドはnullを返します。

1

Javaでプログラミングする場合は、2つの関連ライブラリが必要です。

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

私はそれがジェネリックのサポートを持っているので、今DOM4J 2.0でXPathを見て、そして今、いくつかの優れたハイレベルのサポートを持っていると思います。 Dom4j私は以前のjdomから分かれていたと思う。

いずれかのファイル、URL、文字列などからXMLを読み取って解析し、数行のコードでノード をチェックしてください。

2

私はこのドキュメントを変換するためにXSLを使用していると仮定していますが、変数が最高の機能を提供すると仮定します。これはあなたにNameのノード数を与えると、あなたはあなたが好きなものにそれを変更することができます

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

:あなたはこれを使用すると思います。明らかにそれがゼロならば、それはない、そうでなければそれはカウントです。

1

LINQは素晴らしいです。しかし、あなたが.NET 2でシステムに悩まされている場合に備えて。ちょうどtrythisあなたはXSLT変換を使用している場合

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

をX、あなたはそれを "古い"(XPathの)道を(xmlFragmentは、上記のXMLのあなたの文字列です)しなければならないかもしれません

<のxsl:選択>

<のxsl:テスト= "//員/ Empの">

< - ノードが存在 - >

</XSL:>

< XSL:特に>

< --nodeが存在しない - >

</XSLを:特に>

</XSL:選択>

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"); 

} 
関連する問題