<b:Queues i:nil="true"/>
<b:ReceivedFrom>VJ</b:ReceivedFrom>
<b:SpecialGDSName i:nil="true"/>
我想洗掉“:”之前的所有資料,包括“:”
我想做這樣的:
<Queues i:nil="true"/>
<ReceivedFrom>VJ</b:ReceivedFrom>
<SpecialGDSName i:nil="true"/>
uj5u.com熱心網友回復:
通過像這樣的 XSLT運行XML,這將洗掉與這些元素關聯的命名空間:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
您可以使用僅匹配那些 b:* 元素的更專業的模板,并使用模板執行相同的操作以從屬性中剝離命名空間。
uj5u.com熱心網友回復:
通過 xml Decoder和Encoder運行檔案。根據需要修改令牌上的命名空間:
func rmns(w io.Writer, r io.Reader) error {
e := xml.NewEncoder(w)
defer e.Flush()
d := xml.NewDecoder(r)
for {
t, err := d.RawToken()
if err == io.EOF {
return nil
} else if err != nil {
return err
}
switch e := t.(type) {
case xml.StartElement:
e.Name.Space = ""
for i, a := range e.Attr {
if a.Name.Space != "" {
e.Attr[i].Name = xml.Name{Local: a.Name.Space ":" a.Name.Local}
}
}
t = e
case xml.EndElement:
e.Name.Space = ""
t = e
}
err = e.EncodeToken(t)
if err != nil {
return err
}
}
return nil
}
使用示例:
var doc = `<doc >
<b:Queues i:nil="true"/>
<b:ReceivedFrom>VJ</b:ReceivedFrom>
<b:SpecialGDSName i:nil="true"/>
</doc>`
var buf bytes.Buffer
if err := rmns(&buf, strings.NewReader(doc)); err != nil {
log.Fatal(err)
}
// buf contains the translated document
在操場上運行代碼。
uj5u.com熱心網友回復:
在這個例子中,它總是“b:”,所以最快的方法是使用它們的 strings.ReplaceAll()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385988.html
上一篇:如何通過介面回傳字串{}
