繁体   English   中英

Golang xml不会解组

[英]Golang xml doesn't unmarshal

我试图解组下面的代码,这些代码位于底部。 data.DocumentType始终返回0,并且应该返回内部xml4。有人可以告诉我为什么它不起作用吗?

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

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"`

    }

删除DocumentType上的innerxml标记,并为其指定要匹配的元素的名称( xml:"documentType" )。 xml库文档

如果该结构的字段类型为[]byte或带有标签“,innerxml”的string ,则Unmarshal将在该字段的元素内嵌套原始XML。 其余规则仍然适用。

您不需要存储未处理的XML。 您正在寻找字段的值,因此不需要标记。

工作版本

* edit:为此, ",innerxml"标记也将破坏SchemaVersion字段-没有匹配的元素(并且由于SchemaVersion是字符串),它将存储整个文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM