Comments (5)
Yes, it works
from xmlmapper.
This is good, but we need to think of a generic solution to this problem. Please, keep this issue open.
Thanks for reporting it.
from xmlmapper.
I tried to find the cause and realized that this was due to the formation of the XML string using a dictionary in which the objects are out of order. Then I got to Dictionary+XMLParser.swift and maybe, as a temporary solution, made a manual correction of the header/body order:
`var innerXML: String {
var nodes: [String] = []
comments?.forEach({ (comment: String) in
nodes.append(String(format: "<!--%@-->", comment.xmlEncodedString))
})
childNodes?.forEach({ (childNode:(key: String, value: Any)) in
if let xmlStringNode = XMLParserHelper.xmlString(forNode: childNode.value, withNodeName: childNode.key) {
nodes.append(xmlStringNode)
}
})
if let text = innerText {
nodes.append(text)
}
// ---- temporary fix ----
var orderedRootNodes: [String] = []
if nodes.count == 2 {
if nodes[0].contains("Body") && nodes[1].contains("Header") {
orderedRootNodes.append(nodes[1])
orderedRootNodes.append(nodes[0])
return orderedRootNodes.joined(separator: "\n")
}
}
// ---------------------
return nodes.joined(separator: "\n")
}
`
from xmlmapper.
This is an issue. Tag ordering are important in many cases.
Since Swift version 4.2, Dictionary are actually unordered
Every dictionary is an unordered collection of key-value pairs.
Did your temporary solution worked?
from xmlmapper.
A fix for this issue will be included in the next release (v1.5.2)
You can now use nodesOrder
property of XMLMap
to preserve or change the nodes ordering:
class TestOrderedNodes: XMLMappable {
var nodeName: String!
var id: String?
var name: String?
var nodesOrder: [String]?
init() {}
required init?(map: XMLMap) {}
func mapping(map: XMLMap) {
id <- map["id"]
name <- map["name"]
nodesOrder <- map.nodesOrder
}
}
let testOrderedNodes = TestOrderedNodes()
testOrderedNodes.id = "1"
testOrderedNodes.name = "the name"
testOrderedNodes.nodesOrder = ["id", "name"]
print(testOrderedNodes.toXMLString() ?? "nil")
Of course SOAPEnvelope
will have by default the correct ordering (first the soap:Header and then the soap:Body)
from xmlmapper.
Related Issues (20)
- Cannot correctly parse elements with innerText and optional attributes HOT 5
- Parse failing when illegal characters are present HOT 1
- Getting nil for array of elements HOT 2
- Save XML data to UserDefaults HOT 11
- Invalid XML string for tags with XML encoded values HOT 1
- Fix swift 5 warnings please. HOT 1
- Alamofire incompatability? HOT 2
- Ordered XML Attributes HOT 3
- Issue with optional attributes in simple tags
- Update to Alamofire 5 HOT 4
- Request subspec on Alamofire 4.9 HOT 2
- foobar2000 returns artist twice - once with just text, second time with attribute - XMLMapper can't access second array item HOT 5
- Alamofire 5.2 cannot convert value of type HOT 9
- Question regarding dots in value HOT 2
- Recursive XML elements HOT 6
- How can I use Requests classes with Swift Package Manager? HOT 1
- Duplicate tag but different data HOT 4
- Use XMLMapper to render the exact nodes order for an XML file as they appear? HOT 6
- Privacy Manifest HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from xmlmapper.