none
好头痛的难题,求大家指教!(关于xml查询的) RRS feed

  • 问题

  • 现有一段要解析的xml简要如下:

    - <dsobject classname=...>
    - <props> 
    <prop name=...>文本</prop> 
    <prop name=...>文本</prop> 
    <prop name=...>文本</prop> 
    </props>
    - <dsobject classname=...> 
    - <props> 
    <prop name=...>文本</prop>
    <prop name=...>文本</prop> 
    <prop name=...>文本</prop> 
    </props> 
    - <dsobject classname=...> 
    - <props> 
    <prop name=...>文本</prop>
    <prop name=...>文本</prop> 
    <prop name=...>文本</prop> 
    </props> 
    </dsobject> 
    </dsobject> 
    </dsobject> 
    现在的问题是:如何获取-->标签为<prop>,并且包含的属性name="DocumentTypeDesc"的节点?

    而且这个节点还要符合一个重要的前提条件:这节点,它所属的节点(离它最近的那个)- <dsobject classname=...>,里面的属性classname必须="Document"

    (PS:上面这一段xml只是一个局部区域,整个xml其实还有很多这样的重复写法。所以到时要用XmlNodeList存储这些得到的节点。)

    2012年5月10日 8:18

答案

  • namespace BinarySearch
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load("XMLFile1.xml");
                foreach (XmlNode item in doc.SelectNodes("//prop[@name='DocumentTypeDesc']"))
                {
                    if (item.ParentNode.ParentNode.Attributes["classname"].InnerText == "doc")
                    {
                        Console.WriteLine(item.InnerText);
                    }
                }
            }
        }
    }

    【xml】

    <dsobject classname="doc">
      <props>
        <prop name="DocumentTypeDesc">文本1</prop>
        <prop name="DocumentTypeDesc">文本2</prop>
        <prop name="DocumentTypeDesc">文本3</prop>
      </props>
      <dsobject classname="exe">
        <props>
          <prop name="DocumentTypeDesc">文本4</prop>
          <prop name="DocumentTypeDesc">文本5</prop>
          <prop name="DocumentTypeDesc">文本6</prop>
        </props>
        <dsobject classname="pdf">
          <props>
            <prop name="DocumentTypeDesc">文本7</prop>
            <prop name="DocumentTypeDesc">文本8</prop>
            <prop name="DocumentTypeDesc">文本9</prop>
          </props>
        </dsobject>
      </dsobject>
    </dsobject>

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 moon_prince 2012年5月10日 11:29
    2012年5月10日 8:58
    版主