在 Go 中解析 XML 时处理命名空间

2024-02-13

我正在尝试在 Go 中解析 XML 片段:

package main

import (
    "encoding/xml"
    "fmt"
)

type XML struct {
    Foo string `xml:"foo"`
}

func main() {
    rawXML := []byte(`
<xml>
  <foo>A</foo>
  <ns:foo>B</ns:foo>
</xml>`)

    x := new(XML)
    xml.Unmarshal(rawXML, x)
    fmt.Printf("foo: %s\n", x.Foo)
}

这输出:

foo: B

虽然我预计它会产生:

foo: A

如何获取第一个内容foo标签(即没有命名空间的标签)?


我不认为 xml 解码器可以指定元素不应该具有带有结构标记的命名空间。但我确实知道它可以为您检索有关命名空间的信息,然后您可以对数据进行后处理以获得相同的结果:

package main

import (
    "encoding/xml"
    "fmt"
)

type Foo struct {
    XMLName xml.Name
    Data string `xml:",chardata"`
}

type XML struct {
    Foo []Foo `xml:"foo"`
}

func main() {
    rawXML := []byte(`
<xml>
  <foo>A</foo>
  <ns:foo>B</ns:foo>
</xml>`)

    x := new(XML)
    xml.Unmarshal(rawXML, x)
    //fmt.Printf("foo: %#v\n", x)
    for _, el := range x.Foo {
       if el.XMLName.Space == "" {
          fmt.Printf("non namespaced foo %q", el.Data)
      }
    }
}

http://play.golang.org/p/aDEFPmHPc0 http://play.golang.org/p/aDEFPmHPc0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Go 中解析 XML 时处理命名空间 的相关文章

随机推荐

  • 在一个 LINQ 查询中使用最近邻算法解决旅行商问题?

    Given List
  • 通过 FTP 将数据传输到名称包含空格的文件夹

    如何使用 FTP 通过命令提示符上传到远程目录 目录名称是 TEST DIR 当我尝试使用命令连接时 ftp gt cd TEST DIR it is throwing no such directory found error 请建议 尝
  • 将记录插入带有位置的表中,而不更新所有记录的位置字段

    我正在使用MySQL 我没有好的方法来做到这一点 我有一张桌子 有一个位置field 我需要跟踪其值从 1 到 10 000 假设我在中间第 5000 个位置插入一条记录 所以位置5000到10000需要更新为新位置 旧的 5000 变成
  • 适用于 Eclipse 的 ColdFusion 9 行调试器

    我在 Adob e 文档中看到了一些有关行调试器的参考资料 看看这里 例如 设置 ColdFusion 以使用调试器 http help adobe com en US ColdFusion 9 0 Developing WSc3ff6d0
  • 在 vim 中重新格式化以获得漂亮的列布局

    我在 csv 文件中有这个数据集 1 33570301776 3 61194e 06 7 24503e 06 9 91572e 06 1 25098e 05 0 0102828 0 010352 0 0102677 0 0103789 0
  • 如何使用rand函数生成特定范围内的数字?

    我想在特定范围内生成随机数 例如 选择 18 到 35 之间的随机数 我怎样才能做到这一点rand 功能 根据您使用的语言 内置随机数生成器可能会 已经具备这种能力 多做一些研究 假设您的随机数生成器始终返回数字 在某个给定的范围内 只是为
  • 如何获取GCE实例的内部IP地址列表

    我有很多实例在 GCE 中运行 我想以编程方式获取它们的内部 IP 地址列表 而无需登录到实例 本地 我知道我可以运行 gcloud compute instances list 但是我可以传递任何标志来获取我想要的信息吗 例如 gclou
  • MvvmCross 4 和 WPF SQLite 插件

    在 MvvmCross 4 0 0 中 社区 SQLite 插件已被新的 SQLite PCL 插件替换 如果我没记错的话 它在我的 Android 应用程序中运行得很好 但是当我尝试在 WPF 应用程序中使用它时 我遇到了问题 从 nug
  • SQL Server 条件 CHECK 约束

    我正在使用 SQL Server 2008 Management Studio 以下是我必须写的内容 我对第二个约束有一些困难 这让我有点困惑 我真的很感激一些帮助 编写一条 ALTER TABLE 语句 向 AP 数据库的 Invoice
  • 打字稿中的 Object.freeze / Object.seal

    Is Object freezeTypescript 中建议的还是有其他方法来确保对象保持不可变 Since const仅保护实例 但不保护属性 这显然不是我正在寻找的答案 还有其他方法可以确保对象保持不可变吗 这取决于您想要的保险级别 如
  • Android - 应用内购买 - 您需要将 BILLING 权限添加到您的 APK

    长期以来 我一直面临应用内购买问题 我需要在 Android 应用程序中集成应用内功能 但是当我将 APK 文件上传到 Play 商店时 它不允许我添加 SKU 值 要添加应用内商品 您需要向您的 APK 添加 BILLING 权限我已在清
  • 在Java中组合多个声音流

    我有许多用 PCM PCM SIGNED 8000 0 Hz 16 位 单声道 2 字节 帧 小端 编码的语音声音流 我想通过网络发送它们 为了节省带宽 我目前使用 JSpeex 对流进行编码 然而 为了节省更多带宽 我想 如果可能 在使用
  • Jquery UI范围滑块对鼠标移动的滞后响应

    我正在使用 JQuery UI 范围滑块 我的滑块手柄似乎不能随光标平滑移动 而是滞后 我将 class styloot 与我的 body 标签一起使用 我发现从我的 html 结构中的 body 标记中删除此类可以使滑块移动变得平滑 尽管
  • 使用 Swing 和 Netbeans GUI 编辑器保存文件/打开文件对话框

    我是 Java 初学者 我正在 netbeans 7 3 IDE 中使用其 GUI 编辑器制作一个简单的文本编辑器 我面临的主要问题是我无法保存 打开文件 我创建了 保存 按钮 当我放下文件选择器时 它作为嵌入在 java 窗口中的普通打开
  • 是否可以将远程文件从 Electron App 拖到文件系统上?

    我一直在尝试 Electron 应用程序的文件系统拖放功能 并且在使用本地文件进行所有操作时没有遇到任何问题 我在文档中没有遇到任何内容 所以我想看看是否有人知道这是否可能 我想使用 Electron 中的拖出功能将远程文件拖到应用程序之外
  • 当移动的 div 到达特定区域时将 CSS 应用到它。用于移动元件的静态放大镜

    我偶然发现了创建一个非常具体的元素的问题 我有一个显示不同内容的股票代码 文本 图像和其他类型的内容 我想要做的是添加一个静态 放大镜 以便所有移动内容在放大镜区域时都会缩放 我看到的大多数 jquery 缩放或放大插件从未使用固定位置 而
  • 通过 BLE 上的 ANT+FEC 将用户体重发送到智能训练器

    有谁知道如何将室内智能训练器的用户体重设置发送到 DataPage 55 我想更新用户体重 以使成绩模拟更加真实 我已成功发送成绩 数据页 51 并且对用户体重实施相同的格式似乎没有任何作用 func sendUserConfig peri
  • 带有弧形尖底的头部

    我需要创建下图所示的蓝 绿色区域 它有倾斜的侧面 向下延伸至有轻微弯曲的点 使用什么是实现此目的的最佳方法CSS 如果无法支持 IE9 我需要支持 IE9 或 IE10 我已经开始了基础的演示在这里 http jsbin com quxoh
  • 新的关键字和方法隐藏

    new 关键字用于隐藏相同的基类实现 但我不确定为什么以下代码会生成 Baseclass 输出 class Baseclass public void fun Console Write Base class class Derived1
  • 在 Go 中解析 XML 时处理命名空间

    我正在尝试在 Go 中解析 XML 片段 package main import encoding xml fmt type XML struct Foo string xml foo func main rawXML byte