如何更改每个语句以在XML结果中显示出生日期?

时间:2019-07-15 18:33:28

标签: xml vb.net

我有一个xml文档,每个文档都用于循环各方。我需要获取partyID和出生日期。我正在获取partyID,但出生日期显示为0001-01-01T00:00:00。

XML文档

<Integration>
<Case>
    <CaseEvent Date="06/14/2010" ID="252945068">
        <PartyID>9919636</PartyID>
    </CaseEvent>
    <CaseParty ID="9919636">
        <DateOfBirth>04/27/1910</DateOfBirth>
    </CaseParty>
</Case>
<IntegrationConditions>
    <IntegrationCondition Word="TAWQ" Description="Inserts">
        <NotificationEvent notificationType="TAWQ" elementKey="252945068">InsertSomething</NotificationEvent>
    </IntegrationCondition>
</IntegrationConditions>

预期结果

<InsertPWBRorAOS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="">
    <RelatedParties>
        <CaseParty>
            <DateOfBirth>04/27/1910</DateOfBirth>
            <PartyId>9919636</PartyId>
        </CaseParty>
    </RelatedParties>
</InsertPWBRorAOS>

错误的结果

<InsertPWBRorAOS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="">
    <RelatedParties>
        <CaseParty>
            <DateOfBirth>0001-01-01T00:00:00</DateOfBirth>
            <PartyId>9919636</PartyId>
        </CaseParty>
    </RelatedParties>
</InsertPWBRorAOS>

我的VB.NET代码

Public Shared Sub ProcessInsertPWBRorAOS(ByRef aobjXmlInputDoc As System.Xml.XmlDocument, ByVal aobjxmlNotificationEventNode As XmlNode)
Dim objInsertPWBRorAOS As MMGService.InsertPWBRorAOS = New MMGService.InsertPWBRorAOS
Dim objCaseParty As MMGService.CaseParty
Dim objxmlEventPartyIDNode As XmlNode
Dim strEventId As String
    strEventId = aobjxmlNotificationEventNode.SelectSingleNode("@elementKey").InnerText

    objCaseParty = New MMGService.CaseParty()
'Loop through all PartyIDNodes in CaseEvent with ID equal to NotificationEvent's elementKey 
    For Each objxmlEventPartyIDNode In aobjXmlInputDoc.DocumentElement.SelectNodes("Case/CaseEvent[@ID=" + strEventId + "]/PartyID")
        strPartyID = objxmlEventPartyIDNode.InnerText
        objCaseParty.PartyId = strPartyID
        'DateofBirth
        objCaseParty.DateOfBirth = dtmDateOfBirth
        objInsertPWBRorAOS.RelatedParties(i) = objCaseParty
        i += 1
    Next
End Sub

1 个答案:

答案 0 :(得分:0)

我偶然发现了您这个未解决的问题。已经快一年了。根据到目前为止的评论,这个问题似乎仍然是未解决的。因此,我想为您提供答案,希望它对您仍然有用。

我尚不清楚真正的问题是什么。结果中的出生日期值可能有两个问题。

  1. 日期似乎尚未设定;它设置为0001年1月1日。这是DateSystem.DateTime)变量的最小值,也是未明确初始化时该数据类型的类成员变量的初始值。 / p>

  2. 日期值的格式不同(与“预期结果”部分相比)。

我将在下面解决两个潜在问题。

关于点1:

字段objCaseParty.DateOfBirth设置为变量dtmDateOfBirth的值。因此,似乎dtmDateOfBirth变量也未正确设置/初始化。我建议您在代码中搜索对dtmDateOfBirth变量的所有引用。也许您忘记了在某个地方设置它的值,或者您想另外检查出生日期是否尚未设置(并终止执行并在必要时警告用户)。

关于点2:

通常,Date类型的任何字段都将使用yyyy-MM-ddTHH:mm:ss格式的XML存储/序列化。

如果只想删除时间部分,则可以使用/修改XML架构定义(XSD),并将字段的类型明确包含/更改为xs:date。 (最终,XSD可能会包含类似于 <xs:element name="DateOfBirth" type="xs:date"/>之类的行。)进行此更改后,日期将以yyyy-MM-dd的格式存储。

如果您希望日期值以MM/dd/yyyy的格式显式存储,那么除了将其作为字符串值存储/序列化外,我没有其他方法。它将需要一些额外的编程,但是StackOverflow上已经有几个可用的答案,可以助您一臂之力,例如:

关于“每个循环”的说明:

在For Each循环中,您使用了迭代变量i。该变量在For Each循环中递增,但在循环开始前未用初始值声明。我猜您缺少Dim i As Integer = 0之类的行。