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

问题描述 投票:0回答:1

我有一个xml文档,每个人都使用它来循环各方。我需要获取PartyIDDateOfBirth。我收到PartyID,但DateOfBirth显示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>
</Integration>

预期结果

<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
xml vb.net
1个回答
0
投票

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

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

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

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

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

关于点1:

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

关于第二点:

通常,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循环的注意:

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

© www.soinside.com 2019 - 2024. All rights reserved.