2

私はこのスニペットに取り組んでいますが、期待される出力を得ています。

ここに私の入力があります

<?xml version="1.0" encoding="UTF-8" ?>
<GovTalkMessage xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader">
  <EnvelopeVersion>1.0</EnvelopeVersion>
  <GovTalkDetails>
    <Keys/>
  </GovTalkDetails>
  <Body>
    <NameSearch>
      <ContinuationKey>fcb844eELdiGt/AO3sMH2IGP8Amoxy+wewviAdon</ContinuationKey>
      <RegressionKey>fcb844eJyt0ttO20moxy+wewviAdon</RegressionKey>
      <SearchRows>100</SearchRows>
      <CoSearchItem>
        <CompanyName>WILLIAM ROSE LTD</CompanyName>
        <CompanyNumber>07905646</CompanyNumber>
        <DataSet>LIVE</DataSet>
        <CompanyIndexStatus>DISSOLVED</CompanyIndexStatus>
        <CompanyDate></CompanyDate>
      </CoSearchItem>
    </NameSearch>
  </Body>
</GovTalkMessage>

そして、ここに私のxsltがあります

<?xml version="1.0"?>
<xsl:stylesheet xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

  <xsl:template match="GovTalkMessage/Body/NameSearch/CoSearchItem">
    <xsl:copy-of select="."/>
  </xsl:template>

</xsl:stylesheet>

私の期待される出力は

<CoSearchItem>
  <CompanyName>WILLIAM ROSE LTD</CompanyName>
  <CompanyNumber>07905646</CompanyNumber>
  <DataSet>LIVE</DataSet>
  <CompanyIndexStatus>DISSOLVED</CompanyIndexStatus>
  <CompanyDate></CompanyDate>
</CoSearchItem>

どこが問題なのか誰か助けてください。

4

3 に答える 3

1

xpath-default-namespaceXSLT 2.0 を使用しているため、属性も使用できます。そうすれば、xpath でプレフィックスを使用する必要がなくなります。

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader" 
    xpath-default-namespace="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader" 
    version="2.0">

    <xsl:template match="/">
        <xsl:copy-of select="GovTalkMessage/Body/NameSearch/CoSearchItem"/>
    </xsl:template>

</xsl:stylesheet>
于 2013-08-19T16:57:09.333 に答える
1

適用される最初のテンプレートはルート ノード用であり、使用する場合は名前空間を指定する必要があります。

<?xml version="1.0"?>
<xsl:stylesheet xmlns:g="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0">

  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/">
    <xsl:copy-of select="/g:GovTalkMessage/g:Body/g:NameSearch/g:CoSearchItem"/>
  </xsl:template>

</xsl:stylesheet>

<xsl:output/><xsl:strip-space/>インデントを修正するだけです。

出力:

<?xml version="1.0" encoding="UTF-8"?>
<CoSearchItem xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader">
   <CompanyName>WILLIAM ROSE LTD</CompanyName>
   <CompanyNumber>07905646</CompanyNumber>
   <DataSet>LIVE</DataSet>
   <CompanyIndexStatus>DISSOLVED</CompanyIndexStatus>
   <CompanyDate/>
</CoSearchItem>
于 2013-08-19T14:40:57.153 に答える
0

以下を使用して、目的の出力を達成しました

<xsl:template match="/*[local-name()='GovTalkMessage']/*[local-name()='Body']/*[local-name()='NameSearch']/*[local-name()='CoSearchItem']">
<xsl:copy-of select="."/>
</xsl:template>

そして、それは機能します。全てに感謝。

于 2013-08-27T08:57:42.837 に答える