Golang - 如何将XML文件的一部分提取为字符串?

时间:2014-12-17 14:14:03

标签: xml xml-parsing go

我的XML看起来像这样:

<a>
  <b>
    <c>
      <d>TEXT</d>
   </c>
  </b>
</a>

我知道如何通过xml.Unmarshal函数分离这段代码,但有没有办法只对某个深度执行Unmarshal操作?例如,如果我想获得一个字符串,表示&#34; TEXT&#34;并将其传递给另一个函数?我尝试给出一个子字符集对象,但它仍然试图解析其余的XML ...

2 个答案:

答案 0 :(得分:7)

我认为这就是你要问的问题(也请考虑你的评论)。

package main

import (
    "encoding/xml"
    "fmt"
)

func main() {
    type Result struct {
        Value  string `xml:"b>c>d"`
    }
    v := Result{"none"}

    data := `
        <a>
            <b>
                <c>
                    <d>TEXT</d>             
                </c>
            </b>
        </a>
    `
    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        fmt.Printf("error: %v", err)
        return
    }

    fmt.Printf("Value: %v\n", v.Value)
}

输出:

Value: TEXT

更新:在兰兹的评论之后

func main() {
    type InnerResult struct {
        Value string `xml:",innerxml"`
    }

    type Result struct {
        B InnerResult `xml:"b"`
    }
    v := Result{InnerResult{"none"}}

    data := `
        <a>
            <b>
                <c>
                    <d>TEXT</d>             
                </c>
            </b>
        </a>
    `
    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        fmt.Printf("error: %v", err)
        return
    }

    fmt.Printf("Value: %v\n", v.B.Value)
}

输出:

Value: 
                <c>
                    <d>TEXT</d>             
                </c>

答案 1 :(得分:2)

您可以使用嵌套的xml标记,使xml.Unmarshal

更容易

以下是它的工作原理:http://play.golang.org/p/XtCX7Dh45u