2

名前空間のない単純なXMLドキュメントがあります

これは、 Nameに基づいて特定の要素を検索するためにC#で記述したコードです。

public XmlElement SearchXML(string name)
    {
    XmlDocument xDoc = new XmlDocument();
    string filePath = ConfigurationManager.AppSettings["path"];
    xDoc.Load(filePath);

        string xQryStr = "//NewPatient[Name='" + name + "']";
        xDoc.SelectNodes(xQryStr);

        XmlElement xmlEle = xDoc.DocumentElement;
        return xmlEle;
    }

XMLドキュメントは次のとおりです

XMLファイルのスクリーンショット

SearchXMLメソッドを呼び出して、引数としてDennisを渡そうとすると、特定の要素のみを含むxml要素を返す代わりに、ドキュメント全体が返されます。

どこが間違っているのでしょうか?

助けていただければ幸いです。

4

3 に答える 3

3

xDoc.SelectNodes(xQryStr)元のドキュメントを変更しません。このメソッド呼び出しの戻り値を保存し、代わりにそれを返す必要があります。

元のドキュメントのルート要素(つまり、ツリー全体)を返すだけのATM

編集

あなたのコメントに答えて、あなたは次のように最初にマッチしたXmlElementを釣り上げることができます:

xDoc.SelectNodes(xQryStr).OfType<XmlElement>().FirstOrDefault()

nullこれは、またはのいずれかを返しますXmlElement

于 2012-10-16T08:42:13.730 に答える
2

XPath式に基づいてノードのリストを選択する場合は、次の.SelectNodes方法で使用する必要があります。

public XmlElement SearchXML(string name)
{
    XmlDocument xDoc = new XmlDocument();
    string filePath = ConfigurationManager.AppSettings["path"];
    xDoc.Load(filePath);

    string xQryStr = "//NewPatient[Name='" + name + "']";

    XmlNodeList listOfNodes = xDoc.SelectNodes(xQryStr);

    foreach(XmlNode node in listOfNodes
    {
       // do something with that list of XML nodes you've selected....
       // XmlElement xmlEle = node;
       // return xmlEle;
    }
}

の呼び出しは、一致するXMLノードのリストを.SelectNodes(xpath) 返します(のMSDNドキュメントをXmlDocument.SelectNodes参照)。そのリストを取得したら、一致するノードを反復処理して、それらを使用して何かを実行できます。

または、XPath式に一致するXMLノードが1つだけであると予想される場合は、次も使用できます.SelectSingleNode

    string xQryStr = "//NewPatient[Name='" + name + "']";

    XmlNode matchedNode = xDoc.SelectSingleNode(xQryStr);

    if(matchedNode != null)
    {
       // do something with that list of XML nodes you've selected....
       return matchedNode;
    }
于 2012-10-16T09:01:36.377 に答える
-1

変更できますか

string xQryStr = "//NewPatient[Name='" + name + "']";

 xQryStr = "/NewPatient[Name='" + name + "']";

以下のリンクを参照して くださいhttp://www.csharp-examples.net/xml-nodes-by-name/

于 2012-10-16T08:47:05.907 に答える