You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中遍历XmlNodeList获取seg元素的技术求助

解决VB.NET遍历TMX文件中<tu>节点并提取<seg>内容的问题

你遇到的问题其实是XPath路径的写法踩了个小坑——你用的/seg是绝对路径,它会从整个XML文档的根节点开始找<seg>,而不是从当前正在遍历的<tu>节点往下查找,所以自然拿不到对应节点下的内容。

我给你调整一下代码,同时补充一些实用的细节,方便你把数据存入数据库:

Dim tmxfile As String = "d:\Documents\Desktop\myxml.xml"
Dim xmldoc As New XmlDocument
xmldoc.Load(tmxfile)

' 获取所有<tu>节点集合
Dim tuNodes As XmlNodeList = xmldoc.DocumentElement.SelectNodes("//tu")

' 遍历每个<tu>节点,用For Each比索引循环更直观
For Each tuNode As XmlNode In tuNodes
    ' 先获取当前tu的属性信息(比如创建时间、修改时间),存数据库可能用得到
    Dim createDate As String = tuNode.Attributes("creationdate")?.Value
    Dim changeDate As String = tuNode.Attributes("changedate")?.Value
    Dim context As String = tuNode.SelectSingleNode("./prop[@type='x-context']")?.InnerText

    ' 遍历当前tu下的每个<tuv>节点(每个tuv对应一种语言的译文)
    Dim tuvNodes As XmlNodeList = tuNode.SelectNodes("./tuv")
    For Each tuvNode As XmlNode In tuvNodes
        ' 获取语言标识
        Dim lang As String = tuvNode.Attributes("xml:lang")?.Value
        ' 获取对应的seg内容
        Dim segContent As String = tuvNode.SelectSingleNode("./seg")?.InnerText

        ' 这里就可以把数据存入数据库了,比如调用你的插入方法
        ' SaveToDatabase(createDate, changeDate, context, lang, segContent)
        
        ' 临时弹窗查看结果
        MsgBox($"语言:{lang} | 内容:{segContent} | 上下文:{context}")
    Next
Next

关键知识点说明:

  • 相对路径的写法:用./tuv或者.//seg,开头的.表示从当前节点(也就是当前的<tu>)开始查找,而不是从文档根节点开始。如果结构固定,用./tuv/seg比.//seg更高效,因为它直接指定了层级。
  • 空值保护:用?.运算符可以避免节点或属性不存在时抛出空引用异常,比如如果某个<tu>没有x-context属性,tuNode.SelectSingleNode(...)?.InnerText会返回Nothing而不是崩溃。
  • 精准匹配语言:如果需要单独提取某一种语言的内容,可以直接用XPath筛选,比如要拿英文内容:tuNode.SelectSingleNode("./tuv[@xml:lang='en-gb']/seg")?.InnerText。

这样调整后,就能正确遍历每个<tu>节点,并提取对应语言的<seg>内容,方便你存入数据库啦。

内容的提问来源于stack exchange,提问作者daviddgz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:45:55