|
|
|
@ -379,14 +379,14 @@ func (f *File) replaceNameSpaceBytes(path string, contentMarshal []byte) []byte
|
|
|
|
|
func (f *File) addNameSpaces(path string, ns xml.Attr) {
|
|
|
|
|
exist := false
|
|
|
|
|
mc := false
|
|
|
|
|
ignore := false
|
|
|
|
|
ignore := -1
|
|
|
|
|
if attr, ok := f.xmlAttr[path]; ok {
|
|
|
|
|
for _, attribute := range attr {
|
|
|
|
|
for i, attribute := range attr {
|
|
|
|
|
if attribute.Name.Local == ns.Name.Local && attribute.Name.Space == ns.Name.Space {
|
|
|
|
|
exist = true
|
|
|
|
|
}
|
|
|
|
|
if attribute.Name.Local == "Ignorable" && attribute.Name.Space == "mc" {
|
|
|
|
|
ignore = true
|
|
|
|
|
if attribute.Name.Local == "Ignorable" && getXMLNamespace(attribute.Name.Space, attr) == "mc" {
|
|
|
|
|
ignore = i
|
|
|
|
|
}
|
|
|
|
|
if attribute.Name.Local == "mc" && attribute.Name.Space == "xmlns" {
|
|
|
|
|
mc = true
|
|
|
|
@ -398,13 +398,24 @@ func (f *File) addNameSpaces(path string, ns xml.Attr) {
|
|
|
|
|
if !mc {
|
|
|
|
|
f.xmlAttr[path] = append(f.xmlAttr[path], SourceRelationshipCompatibility)
|
|
|
|
|
}
|
|
|
|
|
if !ignore {
|
|
|
|
|
if ignore == -1 {
|
|
|
|
|
f.xmlAttr[path] = append(f.xmlAttr[path], xml.Attr{
|
|
|
|
|
Name: xml.Name{Local: "Ignorable", Space: "mc"},
|
|
|
|
|
Value: ns.Name.Local,
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
f.setIgnorableNameSpace(path, ignore, ns)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// setIgnorableNameSpace provides a function to set XML namespace as ignorable by the given
|
|
|
|
|
// attribute.
|
|
|
|
|
func (f *File) setIgnorableNameSpace(path string, index int, ns xml.Attr) {
|
|
|
|
|
ignorableNS := []string{"c14", "cdr14", "a14", "pic14", "x14", "xdr14", "x14ac", "dsp", "mso14", "dgm14", "x15", "x12ac", "x15ac", "xr", "xr2", "xr3", "xr4", "xr5", "xr6", "xr7", "xr8", "xr9", "xr10", "xr11", "xr12", "xr13", "xr14", "xr15", "x15", "x16", "x16r2", "mo", "mx", "mv", "o", "v"}
|
|
|
|
|
if inStrSlice(strings.Fields(f.xmlAttr[path][index].Value), ns.Name.Local) == -1 && inStrSlice(ignorableNS, ns.Name.Local) != -1 {
|
|
|
|
|
f.xmlAttr[path][index].Value = strings.TrimSpace(fmt.Sprintf("%s %s", f.xmlAttr[path][index].Value, ns.Name.Local))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// addSheetNameSpace add XML attribute for worksheet.
|
|
|
|
|