C# 搜索XML文件中所有元素级别的节点
我有一些XML文件的格式版本,需要使用C#上传到DB。但是我现在不知道我需要导入的标签是什么级别的,因为根据xml的版本,标签可能是内部组或标签 XML文件的一些示例C# 搜索XML文件中所有元素级别的节点,c#,.net,xml,xml-parsing,linq-to-xml,C#,.net,Xml,Xml Parsing,Linq To Xml,我有一些XML文件的格式版本,需要使用C#上传到DB。但是我现在不知道我需要导入的标签是什么级别的,因为根据xml的版本,标签可能是内部组或标签 XML文件的一些示例 Ex1) <a> <group1> <tag>searched tag</tag> </group1> <b> </b> <c> </c> </a> Ex
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>
Ex1)
搜索标签
例2)
搜索标签
搜索的标记将始终位于group1标记内,并且所有文件都具有xmlns和schema属性
我尝试使用xml.SelectSingleNode(\group1\tag),但当文件具有架构头和命名空间配置时抛出错误
提前感谢。如果您确定元素
标记
位于group1
之下,并且它们之间可以有任意级别的中间节点,并且假设所有元素都在全局命名空间中,那么请使用:(注意斜线的方向):
但是,如果您不知道各个元素位于哪个xmlns
中,则需要这样做:
xml.SelectSingleNode("//*[local-name()='group1']//*[local-name()='tag']")
但是请注意,在MSXml解析器中对大文件使用“//”可能有点慢,因此速度会更快,例如,如果您可以隔离到各个节点的确切路径,然后可以使用|
e、 g.在您的示例中,如果标记可以是“或”Ex1
或Ex2
,则:
/a/group1/tag | /a/b/group1/c/tag
应该有用。我试着像答案一样使用本地名称标记,但仍然得到一个空的XmlNode。我创建的唯一方法是使用xml.GetElementsByTagName(childNodeName)传递group1名称并在收到的XMLNodeList中搜索标记。我的错-我在
local-name()
-修复后错过了()
-修复-我使用MsXml检查了几个测试文件。太棒了!这适用于选择标记值和选择所有group1元素…谢谢
/a/group1/tag | /a/b/group1/c/tag