C#XML文件中的标记路径列表

时间:2011-05-26 14:34:55

标签: c# xml xpath

我想从xml文件中获取所有元素XPath,例如xml文件是, 类似于使用Excel打开XML文件时

<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

我尝试了几种方法,但是不起作用,我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您可以将xml加载到XmlDocument并遍历树,直到您点击一个没有子节点的节点,然后重复。

快速谷歌找到你的例子,并在stackoverflow

上找到了这个

答案 1 :(得分: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)