2011-05-26 24 views
1

我想從一個XML文件中得到的所有元素的XPath,例如XML文件, 的東西,當你打開一個XML文件與Excel在XML文件標籤路徑的C#列表

<BookStore> 
    <BookStoreInfo> 
    <Address /> 
    <Tel /> 
    <Fax /> 
    <BookStoreInfo> 
    <Book id="123" category="Science Fiction"> 
    <BookName /> 
    <ISBN /> 
    <PublishDate /> 
    </Book> 
    <Book> 
    .... 
    </Book> 
</BookStore> 

我想獲得

BookStore/BookStoreInfo/Address 
BookStore/BookStoreInfo/Tel 
BookStore/BookStoreInfo/Fax 
BookStore/Book/@id 
BookStore/Book/@category 
BookStore/Book/BookName 
BookStore/Book/ISBN 
BookStore/Book/PublishDate 

我試過幾種方法,但是不行,我該怎麼辦呢?

+0

會你想同時列出兩個'Book'元素?鑑於您的輸出不包含值,這似乎是多餘的。 – Flynn1179 2011-05-26 15:04:42

回答

0

您可以將xml加載到XmlDocument並遍歷樹,直到您點擊一個沒有子節點的節點,然後繼續並重復。

做了一個快速谷歌找到一個例子,發現這個就在這裏stackoverflow我的方法的

0

僞代碼:

calculateXPaths(curNode, stringSet, curString) { 
    // This ensures only terminal nodes are counted. Remove to get all paths 
    if (!curNode.hasChildren) { 
     stringSet.add(curString) 
    } 

    foreach (attr on curNode) { 
     stringSet.add(curString + "/@" + attr.name) 
    } 

    foreach (childNode on curNode) { 
     curString = curString + "/" + childNode.name  
     calculateXPaths(childNode, stringSet, curString) 
    } 
} 

你開始的全過程,通過調用

calculateXPaths(xmlDocument.rootNode, new Set(), xmlDocument.rootNode.name)