0

Im trying to unmarshal the following code that has the go playground at the bottom. The data.DocumentType always returns 0 and should return the inner xml 4. Can someone tell me why this doesnt work?

package main import ( "encoding/xml" "fmt" ) type doc struct { XMLName xml.Name `xml:"ownershipDocument"` SchemaVersion string `xml:",innerxml"` DocumentType int `xml:",innerxml"` } func main() { var Data doc xml.Unmarshal([]byte(VV), &Data) fmt.Println(Data.DocumentType) } const VV = `<?xml version="1.0"?> <ownershipDocument> <schemaVersion>X0306</schemaVersion> <documentType>4</documentType> <periodOfReport>2015-11-18</periodOfReport> <issuer> <issuerCik>0000820081</issuerCik> <issuerName>CAMBREX CORP</issuerName> <issuerTradingSymbol>CBM</issuerTradingSymbol> </issuer> <reportingOwner> <reportingOwnerId> <rptOwnerCik>0001227832</rptOwnerCik> <rptOwnerName>KORB WILLIAM B</rptOwnerName> </reportingOwnerId> <reportingOwnerAddress> <rptOwnerStreet1>1 MEADOWLANDS PLAZA</rptOwnerStreet1> <rptOwnerStreet2></rptOwnerStreet2> <rptOwnerCity>EAST RUTHERFORD</rptOwnerCity> <rptOwnerState>NJ</rptOwnerState> <rptOwnerZipCode>07073</rptOwnerZipCode> <rptOwnerStateDescription></rptOwnerStateDescription> </reportingOwnerAddress> <reportingOwnerRelationship> <isDirector>1</isDirector> <isOfficer>0</isOfficer> <isTenPercentOwner>0</isTenPercentOwner> <isOther>0</isOther> </reportingOwnerRelationship> </reportingOwner> <nonDerivativeTable> <nonDerivativeTransaction> <securityTitle> <value>Common Stock</value> </securityTitle> <transactionDate> <value>2015-11-18</value> </transactionDate> <transactionCoding> <transactionFormType>4</transactionFormType> <transactionCode>S</transactionCode> <equitySwapInvolved>0</equitySwapInvolved> </transactionCoding> <transactionAmounts> <transactionShares> <value>10000</value> </transactionShares> <transactionPricePerShare> <value>50.18</value> <footnoteId id="F1"/> </transactionPricePerShare> <transactionAcquiredDisposedCode> <value>D</value> </transactionAcquiredDisposedCode> </transactionAmounts> <postTransactionAmounts> <sharesOwnedFollowingTransaction> <value>36562</value> </sharesOwnedFollowingTransaction> </postTransactionAmounts> <ownershipNature> <directOrIndirectOwnership> <value>D</value> </directOrIndirectOwnership> <natureOfOwnership> <value></value> </natureOfOwnership> </ownershipNature> </nonDerivativeTransaction> </nonDerivativeTable> <footnotes> <footnote id="F1">The price reported in Column 4 is a weighted average price. These shares were sold in multiple transactions at prices ranging from $50.00 to $50.58 inclusive. The reporting person undertakes to provide to Cambrex Corporation, any security holder of Cambrex Corporation, or the staff of the Securities and Exchange Commission, upon request, full information regarding the number of shares sold at each separate price within the range set forth in this Footnote 1 to this Form 4.</footnote> </footnotes> <remarks></remarks> <ownerSignature> <signatureName>Samantha Hanley for William B. Korb by POA</signatureName> <signatureDate>2015-11-20</signatureDate> </ownerSignature> </ownershipDocument>` 

http://play.golang.org/p/nJbAF0zKSJ

2 Answers 2

1

Remove the innerxml tag on DocumentType, and give it the name of the element to to match (xml:"documentType"). From the xml library docs:

If the struct has a field of type []byte or string with tag ",innerxml", Unmarshal accumulates the raw XML nested inside the element in that field. The rest of the rules still apply.

You don't need to store unprocessed XML. You're looking for the value of the field, so you don't need the tag.

Working version

*edit: For that matter, the ",innerxml" tag will also break the SchemaVersion field as well—without a matching element (and since SchemaVersion is a string), it stores the whole document.

Sign up to request clarification or add additional context in comments.

Comments

0
I tried to do as much i could please suggest and help . I use this method please comment and suggest. https://play.golang.org/p/kb0HF8ykHW package main; import ( "fmt" "encoding/xml" ) func main(){ dxml := ` <?xml version="1.0"?> <ownershipDocument> <schemaVersion>X0306</schemaVersion> <documentType>4</documentType> <periodOfReport>2015-11-18</periodOfReport> <issuer> <issuerCik>0000820081</issuerCik> <issuerName>CAMBREX CORP</issuerName> <issuerTradingSymbol>CBM</issuerTradingSymbol> </issuer> <reportingOwner> <reportingOwnerId> <rptOwnerCik>0001227832</rptOwnerCik> <rptOwnerName>KORB WILLIAM B</rptOwnerName> </reportingOwnerId> <reportingOwnerAddress> <rptOwnerStreet1>1 MEADOWLANDS PLAZA</rptOwnerStreet1> <rptOwnerStreet2/> <rptOwnerCity>EAST RUTHERFORD</rptOwnerCity> <rptOwnerState>NJ</rptOwnerState> <rptOwnerZipCode>07073</rptOwnerZipCode> <rptOwnerStateDescription/> </reportingOwnerAddress> <reportingOwnerRelationship> <isDirector>1</isDirector> <isOfficer>0</isOfficer> <isTenPercentOwner>0</isTenPercentOwner> <isOther>0</isOther> </reportingOwnerRelationship> </reportingOwner> <nonDerivativeTable> <nonDerivativeTransaction> <securityTitle> <value>Common Stock</value> </securityTitle> <transactionDate> <value>2015-11-18</value> </transactionDate> <transactionCoding> <transactionFormType>4</transactionFormType> <transactionCode>S</transactionCode> <equitySwapInvolved>0</equitySwapInvolved> </transactionCoding> <transactionAmounts> <transactionShares> <value>10000</value> </transactionShares> <transactionPricePerShare> <value>50.18</value> <footnoteId id="F1"/> </transactionPricePerShare> <transactionAcquiredDisposedCode> <value>D</value> </transactionAcquiredDisposedCode> </transactionAmounts> <postTransactionAmounts> <sharesOwnedFollowingTransaction> <value>36562</value> </sharesOwnedFollowingTransaction> </postTransactionAmounts> <ownershipNature> <directOrIndirectOwnership> <value>D</value> </directOrIndirectOwnership> <natureOfOwnership> <value/> </natureOfOwnership> </ownershipNature> </nonDerivativeTransaction> </nonDerivativeTable> <footnotes> <footnote id="F1">The price reported in Column 4 is a weighted average price. These shares were sold in multiple transactions at prices ranging from $50.00 to $50.58 inclusive. The reporting person undertakes to provide to Cambrex Corporation, any security holder of Cambrex Corporation, or the staff of the Securities and Exchange Commission, upon request, full information regarding the number of shares sold at each separate price within the range set forth in this Footnote 1 to this Form 4.</footnote> </footnotes> <remarks/> <ownerSignature> <signatureName>Samantha Hanley for William B. Korb by POA</signatureName> <signatureDate>2015-11-20</signatureDate> </ownerSignature> </ownershipDocument> ` defer func() { if errD := recover(); errD != nil { fmt.Println("!!!!!!!!!!!!!!!!Panic Occured and Recovered in func main(), Error Info: ", errD) } }() var Owner Ownershipdocs err := xml.Unmarshal([]byte(dxml), &Owner) fmt.Println("xml.unmarshal error info :",err) fmt.Println("SchemaVersion : ",Owner.SchemaVersion) fmt.Println("DocumentType : ",Owner.DocumentType) fmt.Println("PeriodOfReport : ",Owner.PeriodOfReport) fmt.Println("IssuerCik : ",Owner.IssuerCik) fmt.Println("IssuerName : ",Owner.IssuerName) fmt.Println("IssuerTradingSymbol : ",Owner.IssuerTradingSymbol) fmt.Println("RptOwnerCik : ",Owner.RptOwnerCik) fmt.Println("RptOwnerName : ",Owner.RptOwnerName) fmt.Println("RptOwnerStreet1 : ",Owner.RptOwnerStreet1) fmt.Println("RptOwnerCity : ",Owner.RptOwnerCity) fmt.Println("RptOwnerState : ",Owner.RptOwnerState) fmt.Println("RptOwnerZipCode : ",Owner.RptOwnerZipCode) fmt.Println("IsDirector : ",Owner.IsDirector) fmt.Println("IsOfficer : ",Owner.IsOfficer) fmt.Println("IsTenPercentOwner : ",Owner.IsTenPercentOwner) fmt.Println("IsOther : ",Owner.IsOther) fmt.Println("SecurityTitleValue : ",Owner.SecurityTitleValue) fmt.Println("TransactionDatevalue : ",Owner.TransactionDatevalue) fmt.Println("TransactionFormType : ",Owner.TransactionFormType) fmt.Println("TransactionCode : ",Owner.TransactionCode) fmt.Println("EquitySwapInvolved : ",Owner.EquitySwapInvolved) fmt.Println("TransactionSharesValue : ",Owner.TransactionSharesValue) fmt.Println("TransactionPricePerShareValue : ",Owner.TransactionPricePerShareValue) fmt.Println("TransactionPricePerSharefootnoteId : ",Owner.TransactionPricePerSharefootnoteId) fmt.Println("TransactionAcquiredDisposedCodeValue : ",Owner.TransactionAcquiredDisposedCodeValue) fmt.Println("Footnote.Footnote : ",Owner.Footnote.Footnote) fmt.Println("OwnerSignaturesignatureName : ",Owner.OwnerSignaturesignatureName) fmt.Println("OwnerSignaturesignatureDate : ",Owner.OwnerSignaturesignatureDate) } type Ownershipdocs struct{ SchemaVersion string `xml:"schemaVersion"` DocumentType string `xml:"documentType"` PeriodOfReport string `xml:"periodOfReport"` IssuerCik string `xml:"issuer>issuerCik"` IssuerName string `xml:"issuer>issuerName"` IssuerTradingSymbol string `xml:"issuer>issuerTradingSymbol"` RptOwnerCik string `xml:"reportingOwner>reportingOwnerId>rptOwnerCik"` RptOwnerName string `xml:"reportingOwner>reportingOwnerId>rptOwnerName"` RptOwnerStreet1 string `xml:"reportingOwner>reportingOwnerAddress>rptOwnerStreet1"` RptOwnerCity string `xml:"reportingOwner>reportingOwnerAddress>rptOwnerCity"` RptOwnerState string `xml:"reportingOwner>reportingOwnerAddress>rptOwnerState"` RptOwnerZipCode string `xml:"reportingOwner>reportingOwnerAddress>rptOwnerZipCode"` IsDirector string `xml:"reportingOwner>reportingOwnerRelationship>isDirector"` IsOfficer string `xml:"reportingOwner>reportingOwnerRelationship>isOfficer"` IsTenPercentOwner string `xml:"reportingOwner>reportingOwnerRelationship>isTenPercentOwner"` IsOther string `xml:"reportingOwner>reportingOwnerRelationship>isOther"` SecurityTitleValue string `xml:"nonDerivativeTable>nonDerivativeTransaction>securityTitle>value"` TransactionDatevalue string `xml:"nonDerivativeTable>nonDerivativeTransaction>transactionDate>value"` TransactionFormType string `xml:"nonDerivativeTable>nonDerivativeTransaction>transactionCoding>transactionFormType"` TransactionCode string `xml:"nonDerivativeTable>nonDerivativeTransaction>transactionCoding>transactionCode"` EquitySwapInvolved string `xml:"nonDerivativeTable>nonDerivativeTransaction>transactionCoding>equitySwapInvolved"` TransactionSharesValue string `xml:"nonDerivativeTable>nonDerivativeTransaction>transactionAmounts>transactionShares>value"` TransactionPricePerShareValue string `xml:"nonDerivativeTable>nonDerivativeTransaction>transactionAmounts>transactionPricePerShare>value"` TransactionPricePerSharefootnoteId string `xml:"nonDerivativeTable>nonDerivativeTransaction>transactionAmounts>transactionPricePerShare>footnoteId"` TransactionAcquiredDisposedCodeValue string `xml:"nonDerivativeTable>nonDerivativeTransaction>transactionAmounts>transactionAcquiredDisposedCode>value"` SharesOwnedFollowingTransactionValue string `xml:"nonDerivativeTable>nonDerivativeTransaction>ownershipNature>directOrIndirectOwnership>value"` Footnote Footnotes `xml:"footnotes"` OwnerSignaturesignatureName string `xml:"ownerSignature>signatureName"` OwnerSignaturesignatureDate string `xml:"ownerSignature>signatureDate"` } type Footnotes struct{ ID string `xml:"id,attr"` Footnote string `xml:"footnote"` } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.