c#
  • .net
  • xml
  • 2010-07-12 35 views 5 likes 
    5

    Tôi đang cố tìm kiếm phần tử xml từ phần tử gốc của tệp trên cơ sở văn bản bên trong. tôi đã thử công việc này nhưng không hoạt động:Tìm phần tử trong xml bằng văn bản bên trong

    rootElRecDocXml.SelectSingleNode("/ArrayOfRecentFiles[name='"+mFilePath+"']"); 
    

    Tôi biết cách học cũ để duyệt qua tất cả phần tử tệp theo yếu tố nhưng tôi không muốn làm điều đó.

    Xin lưu ý rằng: tên phần tử gốc của tôi là ArrayOfRecentFiles và tên phần tử con của tôi là RecentFile

    Trả lời

    5

    Chúng tôi cần xem xml; @Lee cho cách tiếp cận đúng ở đây, vì vậy cái gì đó như:

    var el = rootElRecDocXml.SelectSingleNode(
          "/ArrayOfRecentFiles/RecentFile[text()='"+mFilePath+"']"); 
    

    (dùng chỉnh sửa của bạn/reply vào tài khoản)

    Tuy nhiên! Có rất nhiều gotchas:

    • truy vấn sẽ là trường hợp nhạy cảm
    • trắng-không gian sẽ là đáng kể (vì vậy <foo>abc</foo> là khác nhau để <foo> abc[newline]</foo> vv - nt carriage return)
    • namespace xml là đáng kể, vì vậy bạn có thể cần .SelectSingleNode("/alias:ArrayOfRecentFiles[text()='"+mFilePath+"']", nsmgr);, nơi nsmgr là namespace-manager

    Để cung cấp một ví dụ hoàn chỉnh, phù hợp với nhận xét của bạn:

    XmlDocument rootElRecDocXml = new XmlDocument(); 
    rootElRecDocXml.LoadXml(@"<ArrayOfRecentFiles> <RecentFile>C:\asd\1\Examples\8389.atc</RecentFile> <RecentFile>C:\asd\1\Examples\8385.atc</RecentFile> </ArrayOfRecentFiles>"); 
    string mFilePath = @"C:\asd\1\Examples\8385.atc"; 
    var el = rootElRecDocXml.SelectSingleNode(
        "/ArrayOfRecentFiles/RecentFile[text()='" + mFilePath + "']"); 
    

    Ở đây, elkhôngnull sau SelectSingleNode gọi. Nó tìm thấy nút.

    +0

    ở trên là xml tôi – PUG

    +0

    đây là xml của tôi: C: \ asd \ 1 \ ví dụ \ 8389.atc C: \ asd \ 1 \ ví dụ \ 8385.atc \t PUG

    +0

    @jaminator - xem cập nhật –

    3

    Bạn cần phải sử dụng "text()" để kiểm tra đối với các văn bản bên trong của một phần tử như dưới đây.

    rootElRecDocXml.SelectSingleNode("/ArrayOfRecentFiles[text()='"+mFilePath+"']"); 
    
    +0

    nó trả về null – PUG

    +0

    Hãy thử điều này sau đó đã không nhận ra bạn có thêm một nút con cấp độ gốcElRecDocXml.SelectSingleNode ("/ ArrayOfRecentFiles/RecentFile [text() = '" + mFilePath + "']"); –

    Các vấn đề liên quan