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

Genexus中带命名空间的XML填充SDT失败问题求助

解决GeneXus SDT FromXML方法处理带命名空间XML的空值问题

可行解决方案

1. 正确配置SDT的命名空间映射

确保根SDT及其所有嵌套子SDT、属性的「命名空间」属性,都填入XML对应的命名空间URL(例如http://ivaservizi.agenzia...1.2)。如果XML中存在多命名空间,需要为对应节点的SDT分别配置匹配的命名空间。

2. 使用FromXml重载版本指定命名空间管理器

利用GeneXus提供的FromXml重载方法,传入XmlNamespaceManager来处理前缀与命名空间的映射,即使前缀变化也能适配:

&text = &file.ReadAllText()
&xmlDoc = new XmlDocument()
&xmlDoc.LoadXml(&text)
&nsManager = new XmlNamespaceManager(&xmlDoc.NameTable)

// 动态提取XML中的所有命名空间前缀与URL(适配任意前缀)
For each &attr in &xmlDoc.DocumentElement.Attributes
    if &attr.Name.StartsWith("xmlns:")
        &prefix = &attr.Name.Substring(6) // 截取前缀部分
        &nsManager.AddNamespace(&prefix, &attr.Value)
    endif
EndFor

&isOk = &Fattura.FromXml(&xmlDoc.DocumentElement, &nsManager)

3. 代码动态移除XML命名空间(无需手动修改)

如果不需要保留命名空间信息,可以通过递归处理XML节点,移除所有命名空间前缀后再填充SDT:

&text = &file.ReadAllText()
&xmlDoc = new XmlDocument()
&xmlDoc.LoadXml(&text)

// 递归移除所有节点的命名空间
RemoveNamespaces(&xmlDoc.DocumentElement)

&isOk = &Fattura.FromXml(&xmlDoc.OuterXml)

// 定义递归处理过程
Procedure RemoveNamespaces(&node as XmlNode)
    &newNode = &xmlDoc.CreateNode(&node.NodeType, &node.LocalName, "")
    
    // 复制非命名空间属性
    For each &attr in &node.Attributes
        if not &attr.Name.StartsWith("xmlns")
            &newAttr = &xmlDoc.CreateAttribute(&attr.LocalName)
            &newAttr.Value = &attr.Value
            &newNode.Attributes.Append(&newAttr)
        endif
    EndFor
    
    // 递归处理子节点
    For each &child in &node.ChildNodes
        if &child.NodeType = XmlNodeType.Element
            RemoveNamespaces(&child)
            &newNode.AppendChild(&child)
        else
            &newNode.AppendChild(&xmlDoc.ImportNode(&child, True))
        endif
    EndFor
    
    // 替换原节点
    &node.ParentNode.ReplaceChild(&newNode, &node)
EndProcedure

注意事项

  • 使用命名空间管理器时,动态提取前缀的方式可以适配任意变化的前缀,无需硬编码。
  • 移除命名空间的方法适用于所有节点属于同一命名空间、且无需保留命名空间信息的场景,兼容性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 22:23:13