golang では、xml ファイルを読み取るときに、xml ファイルのヘッダー (つまり、) に関する問題が頻繁に発生し、xml ファイルの解析が失敗する可能性があります。
次に、XML ヘッダーを削除するいくつかの方法を紹介します。
strings.Trim
関数を使用して XML ヘッダーを削除できます。コードは次のとおりです。
func removeXmlHeader(xmlContent string) string { return strings.Trim(xmlContent, "") }
上記のコードでは、strings.Trim
関数を使用して、xmlContent 内の最初の 3 つの特殊文字 (つまり、ASCII コードが
である BOM 文字) を削除します。その XML ヘッダー。
XML ヘッダーを削除するもう 1 つの方法は、xml.Decoder
オブジェクトを使用して XML ファイルを読み取り、 decoder.Token
この関数は、xml ファイル内の Token オブジェクトを取得します。トークンが宣言タグ (つまり、) の場合、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 オブジェクトをスキップします。それ以外の場合は、xml ファイル全体が読み取られるまで次の Token オブジェクトの読み取りを続けます。
Token オブジェクトを strings.Builder オブジェクトに入れると、処理された XML 文字列を返すことができます。
xml ヘッダーを削除する 3 番目の方法は、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.Unmarshal
関数を呼び出して XML ファイルを解析します。 XML ヘッダーを簡単に削除できるように、ターゲット オブジェクトに追加します。
要約すると、上記は XML ヘッダーを削除する 3 つの方法ですが、どの方法を選択するかは、特定のビジネス ニーズによって異なります。これらの方法を使用する場合は、それぞれの方法の特性に注意して、問題を解決するために適切な方法を選択する必要があります。
以上がgolang は XML ヘッダーを削除しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。