我有一些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和模式属性。
我尝试使用xml.SelectSingleNode(\ group1 \ tag),但在文件具有架构头和命名空间配置时抛出错误。
提前致谢。
答案 0 :(得分:2)
如果您确定元素tag
低于group1
,并且它们之间可以有任意数量级别的中间节点,并假设所有元素都在全局命名空间中,那么使用:(注意斜线的方向):
xml.SelectSingleNode("//group1//tag")
但是,如果你不知道哪个xmlns
各自的元素,那么你需要这样做:
xml.SelectSingleNode("//*[local-name()='group1']//*[local-name()='tag']")
但请注意,在MSXml解析器中对大文件使用'//'可能会有点慢,所以它会更快,例如如果您可以隔离到各个节点的确切路径,然后可以使用|
e.g。在您的示例中,如果标记可以是“Ex1
或Ex2
,那么:
/a/group1/tag | /a/b/group1/c/tag
应该有用。