Maison  >  Article  >  développement back-end  >  golang supprime l'en-tête XML

golang supprime l'en-tête XML

WBOY
WBOYoriginal
2023-05-15 11:33:07635parcourir

Dans Golang, lors de la lecture de fichiers XML, vous rencontrez souvent des problèmes avec l'en-tête du fichier XML (c'est-à-dire f8368f4699af9817ef58ddbc8cd9cdc3), ce qui peut entraîner l'échec de l'analyse du fichier XML.

Voici quelques façons de supprimer les en-têtes XML.

La première méthode : supprimer manuellement l'en-tête XML

Nous pouvons utiliser la fonction strings.Trim pour supprimer l'en-tête XML. Le code est le suivant : strings.Trim 函数将xml头部去掉,代码如下:

func removeXmlHeader(xmlContent string) string {
    return strings.Trim(xmlContent, "")
}

在上面的代码中,我们使用 strings.Trim 函数将xmlContent中的前三个特殊字符(即BOM字符,其ASCII码为)去掉,这样就可以去掉xml头了。

第二种方法:使用 xml.Decoder

另一种去掉xml头的方法是使用 xml.Decoder 对象读取xml文件,并使用 decoder.Token 函数获取xml文件中的Token对象。如果Token是声明标签(即0e907110e18727e52ff27452bbf25105),我们就可以在解析xml文件之前跳过它,代码如下:

func removeXmlHeader(xmlContent string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(xmlContent))
    var result strings.Builder
    for {
        token, err := decoder.Token()
        if err == io.EOF {
            break
        }
        if err != nil {
            return "", err
        }
        switch t := token.(type) {
        case xml.ProcInst:
            if t.Target == "xml" {
                continue
            }
        }
        result.WriteString(fmt.Sprintf("%v", token))
    }
    return result.String(), nil
}

在上面的代码中,我们创建了一个 xml.Decoder 对象,然后使用decoder.Token函数从xml文件中读取Token对象。如果读取的Token对象是声明标签(即xml.ProcInst),我们判断其目标是否为xml,如果是则跳过此Token对象,否则继续读取下一个Token对象,直到读完整个xml文件。

当我们把Token对象放入strings.Builder对象中后,就可以返回处理后的xml字符串了。

第三种方法:使用 xml.Unmarshal

第三种去掉xml头的方法是使用 xml.Unmarshal 来解析xml文件时跳过xml头。

func removeXmlHeader(xmlContent string, v interface{}) error {
    xmlContent = strings.Trim(xmlContent, "")
    return xml.Unmarshal([]byte(xmlContent), v)
}

在上面的代码中,我们通过 strings.Trim 函数去掉了xml文件头部,然后调用 xml.Unmarshalrrreee

Dans le code ci-dessus, nous utilisons. La fonction strings.Trim supprime les trois premiers caractères spéciaux (c'est-à-dire les caractères de nomenclature, dont le code ASCII est ) dans xmlContent, afin que l'en-tête XML puisse être supprimé.

Deuxième méthode : utilisez xml.Decoder🎜🎜Une autre façon de supprimer l'en-tête XML consiste à utiliser l'objet xml.Decoder pour lire le fichier XML et à utiliser decoder.Token La fonction obtient l'objet Token dans le fichier XML. Si le Token est une balise de déclaration (c'est-à-dire 0e907110e18727e52ff27452bbf25105), nous pouvons l'ignorer avant d'analyser le fichier XML. Le code est le suivant : 🎜rrreee🎜Dans le code ci-dessus, nous créons un objet xml.Decoder. , Utilisez ensuite la fonction decoder.Token pour lire l'objet Token à partir du fichier XML. Si l'objet Token lu est une balise de déclaration (c'est-à-dire xml.ProcInst), nous déterminons si sa cible est XML. Si tel est le cas, ignorez cet objet Token. Sinon, continuez à lire l'objet Token suivant jusqu'à ce que l'intégralité du fichier XML soit lue. 🎜🎜Après avoir placé l'objet Token dans l'objet strings.Builder, nous pouvons renvoyer la chaîne XML traitée. 🎜🎜La troisième méthode : utilisez xml.Unmarshal🎜🎜La troisième méthode pour supprimer l'en-tête XML consiste à utiliser xml.Unmarshal pour ignorer l'en-tête XML lors de l'analyse du fichier XML. 🎜rrreee🎜Dans le code ci-dessus, nous supprimons l'en-tête du fichier XML via la fonction strings.Trim, puis appelons la fonction xml.Unmarshal pour analyser le fichier XML. dans l'objet cible, afin que vous puissiez facilement supprimer l'en-tête XML. 🎜🎜Pour résumer, les trois méthodes ci-dessus pour supprimer l'en-tête XML. La méthode à choisir dépend des besoins spécifiques de l'entreprise. Lorsque vous utilisez ces méthodes, vous devez faire attention aux caractéristiques de chaque méthode afin de choisir la méthode appropriée pour résoudre le problème. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn