在XML文件的所有元素级别中搜索节点

本文关键字:搜索 节点 元素 XML 文件 | 更新日期: 2023-09-27 18:25:45

我有一些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。选择SingleNode(''group1''tag),但当文件具有架构标头和命名空间配置时会引发错误。

提前谢谢。

在XML文件的所有元素级别中搜索节点

如果您确定元素taggroup1之下,并且它们之间可以有任意级别的中间节点,并且假设所有元素都在全局命名空间中,则使用:(注意斜线的方向):

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

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

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

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

例如,在您的示例中,如果标签可以是"非此即彼"Ex1Ex2,则:

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

应该起作用。