2015-06-05 2 views
0

Я думал, что было бы проще опубликовать новый вопрос, вместо того чтобы делать больше изменений в предыдущем посте. Мой код XSLT отображает правильный адрес в правильном формате, но когда нет адреса найден под CaseParty мой код не отображается адрес в PartyКак отобразить адрес в папке CaseParty?

Я добавил код XSL шаблона адреса, так как адрес найден в XML будет быть отформатирован на основе шаблона адреса, т.е. нестандартного, стандартного и иностранного.

Я хотел бы, чтобы отобразить адрес находится под CaseParty, но если нет адреса найден, я хотел бы, чтобы отобразить адрес в Party

мне нужно проверить, если есть адрес под CaseParty XPath /Integration/Case/CaseParty/Connection[@Word="DFD", а затем <xsl:call-template name="Address"/> (вызовите шаблон адреса для его форматирования и отображения).

Если адрес не найден под CaseParty, я хотел бы найти адрес под Party xpath /Integration/Party/Address[@PartyCurrent="true". Если адрес найден там, то отобразите его.

Образец XML-документ с адресом под CaseParty и адрес под Party

<Integration xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:tsg="http://tsgweb.com" xmlns:IXML="http://tsgweb.com" xmlns:CMCodeQueryHelper="urn:CMCodeQueryHelper" PackageID="DL Notice to DVS" MessageID="67084533" xmlns=""> 
<Case Op="E" InternalID="1617088326" ID="12120229" xmlns:user="http://tylertechnologies.com"> 
    <CaseParty ID="16731290" InternalCasePartyID="1634787102" InternalPartyID="1614631672"> 
     <Connection Word="DFD" BaseConnection="DF" ID="36370323" InternalCasePartyConnectionID="1636469444"> 
      <Description>Defendant</Description> 
     </Connection> 
     <Address CaseCorrespondence="true" ID="17875824" Type="Standard"> 
      <AddressLine2>3712 Testing RD</AddressLine2> 
      <AddressLine4>St Paul, NY, 21457</AddressLine4> 
      <Block>3712</Block> 
      <Street>Testing</Street> 
      <AddrSfxKy Word="RD">Road</AddrSfxKy> 
      <City>St Paul</City> 
      <State>NY</State> 
      <Zip>21457</Zip> 
      <Foreign>false</Foreign> 
      <TimestampCreate>5/27/2015 10:34:08 AM</TimestampCreate> 
     </Address> 
     <TimestampCreate>1/29/2015 5:04:53 PM</TimestampCreate> 
     <TimestampChange/> 
    </CaseParty> 
</Case> 
<Party ID="16731290" InternalPartyID="1614631672"> 
    <Address PartyCorrespondence="true" PartyCurrent="true" ID="17867956" Type="Standard"> 
     <AddressLine2>1906 3RD AVE S #36</AddressLine2> 
     <AddressLine4>Denver, CO, 55408</AddressLine4> 
     <Block>1906</Block> 
     <Street>3RD AVE S #36</Street> 
     <City>Denver</City> 
     <State>CO</State> 
     <Zip>87459</Zip> 
     <Foreign>false</Foreign> 
    </Address> 
</Party> 
</Integration> 

Желаемая Адрес выход

<nc:Address> 
     <nc:AddressFullText> 
      <nc:Address> 
       <nc:LocationStreet> 
        <nc:StreetNumberText>3712</nc:StreetNumberText> 
        <nc:StreetPredirectionalText/> 
        <nc:StreetName>Testing</nc:StreetName> 
        <nc:StreetCategoryText>Road</nc:StreetCategoryText> 
        <nc:StreetPostdirectionalText/> 
        <nc:StreetExtensionText/> 
       </nc:LocationStreet> 
       <nc:LocationCityName>St Paul</nc:LocationCityName> 
       <nc-3.0.1:LocationStateUSPostalServiceCode>NY</nc-3.0.1:LocationStateUSPostalServiceCode> 
       <nc:LocationPostalCode>21457</nc:LocationPostalCode> 
      </nc:Address> 
    </nc:Address> 

Адрес Шаблон

<!--Template Address--> 
<xsl:template name="Address"> 
    <xsl:variable name="vUsState" select="document(concat($gEnvPath,'\Schemas\NiemExchanges\DvsDriverLicenseNotification\niem\codes\usps_states\3.0\1\usps_states.xsd'))/xs:schema/xs:simpleType/xs:restriction/xs:enumeration[@value=current()/State]/@value"/> 
    <xsl:variable name="vCanadianState" select="document(concat($gEnvPath,'\Schemas\NiemExchanges\DvsDriverLicenseNotification\niem\codes\canada_post\3.0\post-canada.xsd'))/xs:schema/xs:simpleType/xs:restriction/xs:enumeration[@value=current()/State]/@value"/> 
    <nc:Address> 
     <xsl:choose> 
      <xsl:when test="Block and ($vUsState or $vCanadianState)"> 
<!--Standard--> 
       <nc:LocationStreet> 
       <nc:StreetNumberText> 
        <xsl:value-of select="Block"/> 
       </nc:StreetNumberText> 
       <nc:StreetPredirectionalText> 
        <xsl:value-of select="PreDir"/> 
       </nc:StreetPredirectionalText> 
       <nc:StreetName> 
        <xsl:value-of select="Street"/> 
       </nc:StreetName> 
       <nc:StreetCategoryText> 
        <xsl:value-of select="AddrSfxKy"/> 
       </nc:StreetCategoryText> 
       <nc:StreetPostdirectionalText> 
        <xsl:value-of select="PostDir"/> 
       </nc:StreetPostdirectionalText> 
       <nc:StreetExtensionText> 
        <xsl:value-of select="normalize-space(concat(UnitKy, ' ' , UnitNum))"/> 
       </nc:StreetExtensionText> 
       </nc:LocationStreet> 
       <nc:LocationCityName> 
        <xsl:value-of select="City"/> 
       </nc:LocationCityName> 
       <nc-3.0.1:LocationStateUSPostalServiceCode> 
        <xsl:value-of select="State"/> 
       </nc-3.0.1:LocationStateUSPostalServiceCode> 
       <nc:LocationPostalCode> 
        <xsl:value-of select="Zip"/> 
       </nc:LocationPostalCode> 
      </xsl:when> 
      <xsl:when test="Foreign ='false' and ($vUsState or $vCanadianState)"> 
<!--Non-Standard--> 
       <nc:LocationStreet> 
        <nc:StreetFullText> 
         <xsl:value-of select="AddressLine1"/> 
        </nc:StreetFullText> 
        <nc:StreetFullText> 
         <xsl:value-of select="AddressLine2"/> 
        </nc:StreetFullText> 
        <nc:StreetFullText> 
         <xsl:value-of select="AddressLine3"/> 
        </nc:StreetFullText> 
       </nc:LocationStreet> 
       <nc:LocationCityName> 
        <xsl:value-of select="City"/> 
       </nc:LocationCityName> 
       <nc-3.0.1:LocationStateUSPostalServiceCode> 
        <xsl:value-of select="State"/> 
       </nc-3.0.1:LocationStateUSPostalServiceCode> 
       <nc:LocationPostalCode> 
        <xsl:value-of select="Zip"/> 
       </nc:LocationPostalCode> 
      </xsl:when> 
      <xsl:otherwise> 
<!--Foreign--> 
       <nc:AddressFullText> 
        <xsl:value-of select="concat(AddressLine1, '&#xa;')"/> 
        <xsl:value-of select="concat(AddressLine2, '&#xa;')"/> 
        <xsl:value-of select="concat(AddressLine3, '&#xa;')"/> 
        <xsl:value-of select="concat(AddressLine4, '&#xa;')"/> 
       </nc:AddressFullText> 
      </xsl:otherwise> 
     </xsl:choose> 
    </nc:Address> 
</xsl:template> 

Мой код xsl работает только при наличии адреса CaseParty и не работает, если нет адреса под CaseParty. Он не может отображать адрес в Party

<nc:Address> 
<nc:AddressFullText> 
    <xsl:for-each select="/Integration/Case/CaseParty[Connection/@Word='DFD']/Address"> 
     <xsl:call-template name="Address"/> 
    </xsl:for-each> 
</nc:AddressFullText> 

ответ

0

У вас есть два правила XPATH, как упомянуто в вопросе, первый:

/Integration/Case/CaseParty[Connection/@Word='DFD']/Address 

и второе:

/Integration/Party/Address[@PartyCurrent="true"] 

Вы можете комбинировать два с помощью объединения xpath (|). Но поскольку второе правило используется только, когда первый не удовлетворены, то мы также должны добавить предикат, который является отрицанием первого правила ко второму правилу, например, так (отформатирован для удобства чтения):

/Integration[ 
    not(
     Case/CaseParty[Connection/@Word='DFD']/Address 
    ) 
] 
/Party 
/Address[@PartyCurrent='true'] 

затем вы можете использовать комбинированное правило, в XSL select части здесь:

<xsl:for-each select="/Integration/Case/CaseParty[Connection/@Word='DFD']/Address | /Integration[not(Case/CaseParty[Connection/@Word='DFD']/Address)]/Party/Address[@PartyCurrent='true']"> 
    <xsl:call-template name="Address"/> 
</xsl:for-each> 
+0

Har07, код, который вы предложили работает, но затем он добавляет дополнительный элемент с NONE ' \t <пс: AddressFullText> NONE ', вызывающий схему va погрешность.Вывод выглядит следующим образом ' <пс: AddressFullText> 123 Iceberg Rd Ontario Канада 12345A \t <пс: AddressFullText> NONE ' Ожидаемые результаты должны смотреть как это ' 123 Айсберг Rd Онтарио Канада 12345A ' – Angela

Смежные вопросы