3

パスを使用して要素にアクセスする方法について昨日尋ねた質問に対するこの回答を得ました-

反対のことは可能ですか?GetElementsByTagNameメソッドを使用して特定の要素(xmlのlevel4)を見つけた場合、この要素のパスを取得して、後で使用するために変数に割り当てる方法はありますか?

<?xml version="1.0" encoding="utf-8" ?>
<level1> 
    <level2> 
        <level3>header3</level3> 
            <level4>header4</level4> 
        <level3>header31</level3> 
    </level2> 
    <level2> 
        <level3>nnn</level3> 
        <level3>nnnnn</level3> 
    </level2> 
</level1> 
4

3 に答える 3

1

System.XmlにあるXmlDocumentオブジェクトを使用してから、nullのParentNodeを取得するまでParentNodeプロパティを使用します。これを実現するには、再帰関数を使用します。

于 2012-09-27T13:32:29.153 に答える
1

次の方法でノードを抽出したとします。

XmlNodeList nl = doc.GetElementsByTagName("level4");

それから

        XmlNode node = nl[0]; 
        String sPath = node.Name;
        System.Xml.XmlNode np = node.ParentNode;
        while (np != null && np.NodeType != XmlNodeType.Document)
        {
            sPath = String.Format("{0}/{1}", np.Name, sPath);
            np = np.ParentNode;
        }
        sPath = "/" + sPath;
        Debug.WriteLine(sPath);

sPathの値として「/level1/ level2/level4」を取得します

*注:入力XMLではレベル3がレベル4の兄弟(親ではない)であるため、これは正しいです

于 2012-09-27T14:03:48.463 に答える
0

XmlElementオブジェクトにはすでに親オブジェクトへのポインタがあるため、ドキュメントに到達するまで親から祖父母のasoをたどることで、階層が逆になります。

于 2012-09-27T13:33:36.403 に答える