1

我有一些 XML 文件的格式版本,需要使用 C# 上传到数据库。但我现在不知道我需要导入的标签到底是什么级别,因为根据 xml 的版本,标签可能是内部其他组或标签。

XML 文件的一些示例

Ex1)
<a>
   <group1>
      <tag>searched tag</tag>      
   </group1>
   <b>   </b>
   <c>   </c>
</a>

Ex2)
<a>
   <b>
      <group1>
          <c>
             <tag>searched tag</tag>
          </c>
      </group1>
   </b>
</a>

搜索到的标签将始终在 group1 标签内,并且所有文件都有 xmlns 和 schema 属性。

我尝试使用 xml.SelectSingleNode(\group1\tag) 但当文件具有架构头和命名空间配置时抛出错误。

提前致谢。

4

1 回答 1

2

如果你确定元素tag在下面group1,并且它们之间可以有任意数量的中间节点,并且假设所有元素都在全局命名空间中,那么使用:(注意斜线的方向):

xml.SelectSingleNode("//group1//tag")

但是,如果您知道xmlns各个元素在其中,那么您需要这样做:

xml.SelectSingleNode("//*[local-name()='group1']//*[local-name()='tag']")

但是请注意,在 MSXml 解析器中对大文件使用“//”可能会有点慢,因此它会更快,例如,如果您可以隔离到各个节点的确切路径,然后可以使用|

例如,在您的示例中,如果标签可以是 'either' Ex1OR Ex2,则:

/a/group1/tag | /a/b/group1/c/tag

应该管用。

于 2013-08-01T13:28:38.770 回答