Как я могу получить результат узла в моем коде? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть XML-счет, где находится узел PeriodWeekNum. Я хочу, чтобы год сопровождался буквой W, а затем номером недели -> YYYNWW. Я получаю только год и букву w -> 2019W. Я хочу, чтобы результат узла PeriodWeekNum также был в моем коде, но я не могу его получить.

Я уже пробовал следующее:

<xsl:template match="/">
   <xsl:for-each select="/x:Invoice">
      <xsl:if test="x:Header/x:DocumentDateTime"><xsl:value-of select="concat(substring(x:Header/x:DocumentDateTime,1,4),'W')"/></xsl:if>
      <xsl:if test="x:Line/x:UserArea/x:TimeCard/x:ReportedTime/x:PeriodWeekNum"><xsl:value-of select="x:Line/x:UserArea/x:TimeCard/x:ReportedTime/x:PeriodWeekNum"/></xsl:if>
   </xsl:for-each>
</xsl:template>

Это XML-счет

<Invoice xmlns="http://www.openapplications.org/oagis" xsi="http://www.w3.org/2001/XMLSchema-instance" hrx="http://ns.hr-xml.org/2007-04-15" nl="http://ns.hr-xml.org/2007-04-15" schemaLocation="http://www.openapplications.org/oagis ../Invoice.xsd http://ns.hr-xml.org/2007-04-15 InvoiceAdditionalNL.xsd">
<Header>
<DocumentIds>
<DocumentId>
<Id>19068863</Id>
</DocumentId>
</DocumentIds>
<DocumentDateTime>2019-06-18T00:00:00Z</DocumentDateTime>
<ReasonCode>hours</ReasonCode>
<TotalAmount currency="EUR">58.02</TotalAmount>
<PaymentTerms>
<PaymentTermsDate>2019-06-18T00:00:00Z</PaymentTermsDate>
<NumberOfDays>40</NumberOfDays>
</PaymentTerms>
<Parties>
<BillToParty>
<PartyId>
<Id>012634</Id>
</PartyId>
<Name>BLABLABLA</Name>
<Addresses>
<PrimaryAddress>
<AddressLine>BLABLA 17</AddressLine>
<City>BLABLA</City>
<Country>NL</Country>
<PostalCode>2341 DA</PostalCode>
<Telephone>0123435</Telephone>
</PrimaryAddress>
</Addresses>
<Contacts>
<Contact>
<Description>bladieblad</Description>
</Contact>
</Contacts>
</BillToParty>
<CustomerParty>
<PartyId>
<Id>0123333</Id>
</PartyId>
<Name>Aasdsdasd</Name>
<Addresses>
<PrimaryAddress>
<AddressLine>Nasdasd 44</AddressLine>
<City>REasdsad</City>
<Country>NL</Country>
<PostalCode>1111 AA/PostalCode>
<Telephone>01234344545</Telephone>
</PrimaryAddress>
</Addresses>
<Contacts>
<Contact>
<Description>9008</Description>
</Contact>
</Contacts>
</CustomerParty>
<RemitToParty>
<PartyId>
<Id>8</Id>
</PartyId>
<Name>bladieblad BV</Name>
<TaxId>122323421</TaxId>
<Addresses>
<PrimaryAddress>
<AddressLine>Mercudfsdfsdf 1</AddressLine>
<City>Hsdfsdfds</City>
<PostalCode>1111 DD</PostalCode>
<Description>Hertertertntoor</Description>
<Telephone>12344545-50</Telephone>
</PrimaryAddress>
<SecondaryAddress/>
</Addresses>
<Contacts>
<Contact>
<Description>Addfwefw</Description>
<Addresses>
<PrimaryAddress>
<AddressLine>Pwefwefwe 24</AddressLine>
<City>HEwefwefe</City>
<Country>NL</Country>
<PostalCode>1111 DT</PostalCode>
<Description>Vestiging</Description>
<Telephone>121212</Telephone>
</PrimaryAddress>
<SecondaryAddress>
<AddressLine>Pefefefe</AddressLine>
<City>HEfefe</City>
<Country>NL</Country>
<PostalCode>61212 df</PostalCode>
</SecondaryAddress>
</Addresses>
</Contact>
</Contacts>
</RemitToParty>
<SupplierParty>
<PartyId>
<Id>8</Id>
</PartyId>
<Name>Oereere3r</Name>
<TaxId>ererere44B01</TaxId>
<Addresses>
<PrimaryAddress>
<AddressLine>Mefefegfefe 1</AddressLine>
<City>HOefefefe</City>
<PostalCode>2111 HA</PostalCode>
<Description>H3r344343</Description>
<Telephone>0122212120</Telephone>
</PrimaryAddress>
<SecondaryAddress/>
</Addresses>
<Contacts>
<Contact>
<Description>blabla</Description>
<Addresses>
<PrimaryAddress>
<AddressLine>ererer 24</AddressLine>
<City>HererN</City>
<Country>NL</Country>
<PostalCode>6111 LT</PostalCode>
<Description>Ve34343stg</Description>
<Telephone>026 47errer5</Telephone>
</PrimaryAddress>
<SecondaryAddress>
<AddressLine>Pooererer 24</AddressLine>
<City>Hererere</City>
<Country>NL</Country>
<PostalCode>6611 dd</PostalCode>
</SecondaryAddress>
</Addresses>
</Contact>
</Contacts>
</SupplierParty>
</Parties>
<Type>Both</Type>
<Reason>regular</Reason>
<TotalCharges currency="EUR">47.95</TotalCharges>
<TotalTax currency="EUR">10.07</TotalTax>
<Tax>
<TaxAmount currency="EUR">10.07</TaxAmount>
<TaxBaseAmount currency="EUR">47.95</TaxBaseAmount>
<PercentQuantity uom="BTW">21.00</PercentQuantity>
</Tax>
<UserArea>
<StaffingAdditionalData xmlns="http://ns.hr-xml.org/2007-04-15">
<CustomerReportingRequirements>
<PurchaseOrderNumber/>
<CostCenterCode>9523</CostCenterCode>
</CustomerReportingRequirements>
<ReferenceInformation>
<StaffingSupplierId idOwner="StaffingCustomer">
<IdValue>8</IdValue>
</StaffingSupplierId>
<StaffingCustomerId idOwner="StaffingCustomer">
<IdValue>012634</IdValue>
</StaffingCustomerId>
<StaffingCustomerOrgUnitId idOwner="StaffingCustomer">
<IdValue name="Ablabla"/>
</StaffingCustomerOrgUnitId>
</ReferenceInformation>
</StaffingAdditionalData>
<StaffingOrganization typeOfOrganization="Supplier" xmlns="http://ns.hr-xml.org/2007-04-15">
<Organization>
<OrganizationName>Oldedede</OrganizationName>
</Organization>
<PaymentInfo>
<BankAccountInfo>
<BankInfoByJurisdiction bankJurisdiction="NL">
<BankCode>BANKBANK</BankCode>
<BankWindow/>
<BankAccountNumber>NLBDEUBDUEBDEUBD</BankAccountNumber>
<BankAccountKey/>
<BankAccountType>IBAN</BankAccountType>
</BankInfoByJurisdiction>
<BankAccountForeign/>
</BankAccountInfo>
</PaymentInfo>
</StaffingOrganization>
<StaffingOrganizationNL xmlns="http://ns.hr-xml.org/2007-04-15">
<ChamberofCommerceReference>27ededed</ChamberofCommerceReference>
</StaffingOrganizationNL>
</UserArea>
</Header>
<Line>
<LineNumber>1</LineNumber>
<ReasonCode/>
<Charges>
<TotalCharge>
<Total currency="EUR">-815.60</Total>
</TotalCharge>
</Charges>
<DocumentReferences>
<InvoiceDocumentReference>
<DocumentIds>
<DocumentId>
<Id>1edede</Id>
</DocumentId>
</DocumentIds>
</InvoiceDocumentReference>
</DocumentReferences>
<Line>
<LineNumber>1A</LineNumber>
<Charges>
<TotalCharge>
<Total currency="EUR">-775.60</Total>
</TotalCharge>
</Charges>
<Tax>
<PercentQuantity uom="BTW">21.00</PercentQuantity>
</Tax>
<Price>
<Amount currency="EUR">22.16</Amount>
<PerQuantity uom="regular">1</PerQuantity>
</Price>
<ItemQuantity uom="regular">-35.00</ItemQuantity>
</Line>
<Line>
<LineNumber>1B</LineNumber>
<Charges>
<TotalCharge>
<Total currency="EUR">-40.00</Total>
</TotalCharge>
</Charges>
<Tax>
<PercentQuantity uom="BTW">21.00</PercentQuantity>
</Tax>
<Price>
<Amount currency="EUR">8.00</Amount>
<PerQuantity uom="Travel expenses">1</PerQuantity>
</Price>
<ItemQuantity uom="Travel expenses">-5.00</ItemQuantity>
</Line>
<UserArea>
<TimeCard xmlns="http://ns.hr-xml.org/2007-04-15">
<Id idOwner="StaffingCustomer">
<IdValue>Aedede</IdValue>
</Id>
<ReportedResource>
<Person>
<Id idOwner="StaffingCustomer">
<IdValue>151MIET001</IdValue>
</Id>
<PersonName>
<FormattedName>M. edededed</FormattedName>
<LegalName>M. Mdededede</LegalName>
<GivenName>Maededed</GivenName>
<PreferredGivenName>Mdedede</PreferredGivenName>
<FamilyName>Miededed</FamilyName>
</PersonName>
</Person>
</ReportedResource>
<ReportedTime>
<PeriodStartDate>2019-05-20T00:00:00Z</PeriodStartDate>
<PeriodEndDate>2019-05-26T00:00:00Z</PeriodEndDate>
<PeriodWeekNum>21</PeriodWeekNum>
<TimeInterval type="regular" billable="true">
<StartDateTime>2019-05-20T00:00:00Z</StartDateTime>
<EndDateTime>2019-05-26T00:00:00Z</EndDateTime>
<Duration>35.00</Duration>
<RateOrAmount currency="EUR" type="Hourly" multiplier="100.00">22.16</RateOrAmount>
<AdditionalData>
<CustomerReportingRequirements>
<PurchaseOrderLineItem>0</PurchaseOrderLineItem>
</CustomerReportingRequirements>
</AdditionalData>
</TimeInterval>
<Allowance type="Travel expenses" billable="true">
<Id>
<IdValue name="allowance"/>
</Id>
<StartDate>2019-05-20T00:00:00Z</StartDate>
<EndDate>2019-05-26T00:00:00Z</EndDate>
<Amount currency="EUR">8.00</Amount>
<Quantity>5.00</Quantity>
<AdditionalData>
<CustomerReportingRequirements>
<PurchaseOrderLineItem>0</PurchaseOrderLineItem>
</CustomerReportingRequirements>
</AdditionalData>
</Allowance>
</ReportedTime>
<SubmitterInfo>
<SubmittedDateTime>2019-06-19</SubmittedDateTime>
</SubmitterInfo>
<AdditionalData>
<StaffingAdditionalData xmlns="http://ns.hr-xml.org/2007-04-15">
<CustomerReportingRequirements>
<PurchaseOrderNumber/>
<CostCenterCode>9523</CostCenterCode>
<ProjectCode/>
</CustomerReportingRequirements>
<ReferenceInformation>
<AssignmentId idOwner="StaffingCompany">
<IdValue>1510009388</IdValue>
</AssignmentId>
</ReferenceInformation>
</StaffingAdditionalData>
</AdditionalData>
</TimeCard>
<StaffingAdditionalData xmlns="http://ns.hr-xml.org/2007-04-15">
<CustomerReportingRequirements>
<PurchaseOrderNumber/>
<CostCenterCode>9523</CostCenterCode>
<ProjectCode/>
</CustomerReportingRequirements>
</StaffingAdditionalData>
</UserArea>
</Line>
<Line>
<LineNumber>2</LineNumber>
<ReasonCode/>
<Charges>
<TotalCharge>
<Total currency="EUR">863.55</Total>
</TotalCharge>
</Charges>
<Line>
<LineNumber>2A</LineNumber>
<Charges>
<TotalCharge>
<Total currency="EUR">823.55</Total>
</TotalCharge>
</Charges>
<Tax>
<PercentQuantity uom="BTW">21.00</PercentQuantity>
</Tax>
<Price>
<Amount currency="EUR">23.53</Amount>
<PerQuantity uom="regular">1</PerQuantity>
</Price>
<ItemQuantity uom="regular">35.00</ItemQuantity>
</Line>
<Line>
<LineNumber>2B</LineNumber>
<Charges>
<TotalCharge>
<Total currency="EUR">40.00</Total>
</TotalCharge>
</Charges>
<Tax>
<PercentQuantity uom="BTW">21.00</PercentQuantity>
</Tax>
<Price>
<Amount currency="EUR">8.00</Amount>
<PerQuantity uom="Travel expenses">1</PerQuantity>
</Price>
<ItemQuantity uom="Travel expenses">5.00</ItemQuantity>
</Line>
<UserArea>
<TimeCard xmlns="http://ns.hr-xml.org/2007-04-15">
<Id idOwner="StaffingCustomer">
<IdValue/>
</Id>
<ReportedResource>
<Person>
<Id idOwner="StaffingCustomer">
<IdValue>15ededed</IdValue>
</Id>
<PersonName>
<FormattedName>Mdededed</FormattedName>
<LegalName>M. Mideded</LegalName>
<GivenName>Mdededede</GivenName>
<PreferredGivenName>Mdedede</PreferredGivenName>
<FamilyName>Mideedede</FamilyName>
</PersonName>
</Person>
</ReportedResource>
<ReportedTime>
<PeriodStartDate>2019-05-20T00:00:00Z</PeriodStartDate>
<PeriodEndDate>2019-05-26T00:00:00Z</PeriodEndDate>
<PeriodWeekNum>21</PeriodWeekNum>
<TimeInterval type="regular" billable="true">
<StartDateTime>2019-05-20T00:00:00Z</StartDateTime>
<EndDateTime>2019-05-26T00:00:00Z</EndDateTime>
<Duration>35.00</Duration>
<RateOrAmount currency="EUR" type="Hourly" multiplier="100.00">23.53</RateOrAmount>
<AdditionalData>
<CustomerReportingRequirements>
<PurchaseOrderLineItem>0</PurchaseOrderLineItem>
</CustomerReportingRequirements>
</AdditionalData>
</TimeInterval>
<Allowance type="Travel expenses" billable="true">
<Id>
<IdValue name="allowance"/>
</Id>
<StartDate>2019-05-20T00:00:00Z</StartDate>
<EndDate>2019-05-26T00:00:00Z</EndDate>
<Amount currency="EUR">8.00</Amount>
<Quantity>5.00</Quantity>
<AdditionalData>
<CustomerReportingRequirements>
<PurchaseOrderLineItem>0</PurchaseOrderLineItem>
</CustomerReportingRequirements>
</AdditionalData>
</Allowance>
</ReportedTime>
<SubmitterInfo>
<SubmittedDateTime>2019-06-19</SubmittedDateTime>
</SubmitterInfo>
<AdditionalData>
<StaffingAdditionalData xmlns="http://ns.hr-xml.org/2007-04-15">
<CustomerReportingRequirements>
<PurchaseOrderNumber/>
<CostCenterCode>9523</CostCenterCode>
<ProjectCode/>
</CustomerReportingRequirements>
<ReferenceInformation>
<AssignmentId idOwner="StaffingCompany">
<IdValue>1510009552</IdValue>
</AssignmentId>
</ReferenceInformation>
</StaffingAdditionalData>
</AdditionalData>
</TimeCard>
<StaffingAdditionalData xmlns="http://ns.hr-xml.org/2007-04-15">
<CustomerReportingRequirements>
<PurchaseOrderNumber/>
<CostCenterCode>9523</CostCenterCode>
<ProjectCode/>
</CustomerReportingRequirements>
</StaffingAdditionalData>
</UserArea>
</Line>
</Invoice>

Я знаю, что XML плохо написан, но это XML, который мы получаем ... Мне нужно сделать это с этим.

Ожидаемый результат должен быть 2019W21, но фактический результат теперь 2019W. Может ли кто-нибудь помочь мне с тем, что я делаю неправильно?

PS: я удалил конфиденциальную информацию, поэтому вы видите BLADIABLAD и т. Д.

1 Ответ

0 голосов
/ 25 июня 2019

Основная проблема, с которой вы столкнулись, заключается в том, что Timecard и все его потомки находятся в другом пространстве имен, Invoice

 <TimeCard xmlns="http://ns.hr-xml.org/2007-04-15">

Итак, вам нужно объявить это пространство имен в вашем XSLT (здесь будет использоваться любой префикс. Это должен быть URI)

xmlns:t="http://ns.hr-xml.org/2007-04-15"

Тогда ваше выражение xpath становится таким:

x:Line/x:UserArea/t:TimeCard/t:ReportedTime/t:PeriodWeekNum

Что касается получения максимального номера недели, вам нужно заменить xsl:if на xsl:for-each, который затем можно отсортировать в порядке убывания.

<xsl:for-each select="x:Line/x:UserArea/t:TimeCard/t:ReportedTime/t:PeriodWeekNum">
  <xsl:sort data-type="number" order="descending" />
  <xsl:if test="position() = 1">
    <xsl:value-of select="." />
  </xsl:if>
</xsl:for-each>

Попробуйте этот полный XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:x="http://www.openapplications.org/oagis"
    xmlns:t="http://ns.hr-xml.org/2007-04-15"
    version="1.0">

<xsl:output method="text" />

<xsl:template match="/">
   <xsl:for-each select="/x:Invoice">
      <xsl:if test="x:Header/x:DocumentDateTime"><xsl:value-of select="concat(substring(x:Header/x:DocumentDateTime,1,4),'W')"/></xsl:if>
      <xsl:for-each select="x:Line/x:UserArea/t:TimeCard/t:ReportedTime/t:PeriodWeekNum">
         <xsl:sort data-type="number" order="descending" />
         <xsl:if test="position() = 1">
            <xsl:value-of select="." />
         </xsl:if>
      </xsl:for-each>
   </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
...