1

私はこのxmlデータを持っています

<XMLCreators>
<row>
<RateNumber>1</RateNumber>
<RateLetter>Null</RateLetter>
<AssessmentStreet>Abesinia Passage</AssessmentStreet>
<RateAccomDesc>Dwelling  (Part Of)</RateAccomDesc>
</row>
<row>
<RateNumber>1a</RateNumber>
<RateLetter>Null</RateLetter>
<AssessmentStreet>Arena's Palace Lane</AssessmentStreet>
<RateAccomDesc>Edmund's Home</RateAccomDesc>
</row>
</XMLCreators>

このxslで出力要素を変更しました

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes" method="xml"/> 
<xsl:template match="/">
    <Address>  <xsl:apply-templates/> </Address>
    </xsl:template>
<xsl:template match="/XMLCreators/row">
    <Rowinfo> <xsl:apply-templates/> </Rowinfo>
</xsl:template>

<xsl:template match="/XMLCreators/row/RateNumber">
    <Locator> <xsl:apply-templates/> </Locator>
</xsl:template>
<xsl:template match="/XMLCreators/row/AssessmentStreet">
    <thoroughfare> <xsl:apply-templates/> </thoroughfare>
</xsl:template>

<xsl:template match="/XMLCreators/row/RateAccomDesc">
    <LocatorName> <xsl:apply-templates/> </LocatorName>
</xsl:template>

     </xsl:stylesheet>

そしてこれを生み出した

<?xml version="1.0" encoding="utf-8"?>
<Address>
<Rowinfo>
<Locator>1</Locator>
Null
<thoroughfare>Abesinia Passage</thoroughfare>
<LocatorName>Dwelling  (Part Of)</LocatorName>
</Rowinfo>
<Rowinfo>
<Locator>1a</Locator>
Null
<thoroughfare>Arena's Palace Lane</thoroughfare>
<LocatorName>Edmund's Home</LocatorName>
</Rowinfo>
</Address>

rowinfo (locatordesignator) に新しい要素を追加し、(rateletter と RateAccomDesc) の値を連結して入力したいと考えています。

これについて助けが必要です。

4

2 に答える 2

1

このテンプレートを追加するだけです:

 <xsl:template match="RateLetter">
  <LocatorDesignator>
   <xsl:value-of select="concat(., ', ', ../RateAccomDesc)"/>
  </LocatorDesignator>
 </xsl:template>

完全な変換は次のようになります。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes" />
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  <Address>  <xsl:apply-templates/> </Address>
 </xsl:template>

 <xsl:template match="row">
  <Rowinfo> <xsl:apply-templates/> </Rowinfo>
 </xsl:template>

 <xsl:template match="RateNumber">
  <Locator> <xsl:apply-templates/> </Locator>
 </xsl:template>

 <xsl:template match="AssessmentStreet">
  <thoroughfare> <xsl:apply-templates/> </thoroughfare>
 </xsl:template>

 <xsl:template match="RateAccomDesc">
  <LocatorName> <xsl:apply-templates/> </LocatorName>
 </xsl:template>

 <xsl:template match="RateLetter">
  <LocatorDesignator>
   <xsl:value-of select="concat(., ', ', ../RateAccomDesc)"/>
  </LocatorDesignator>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用されると、次のようになります。

<XMLCreators>
    <row>
        <RateNumber>1</RateNumber>
        <RateLetter>Null</RateLetter>
        <AssessmentStreet>Abesinia Passage</AssessmentStreet>
        <RateAccomDesc>Dwelling  (Part Of)</RateAccomDesc>
    </row>
    <row>
        <RateNumber>1a</RateNumber>
        <RateLetter>Null</RateLetter>
        <AssessmentStreet>Arena's Palace Lane</AssessmentStreet>
        <RateAccomDesc>Edmund's Home</RateAccomDesc>
    </row>
</XMLCreators>

必要な正しい結果が生成されます。

<Address>
   <Rowinfo>
      <Locator>1</Locator>
      <LocatorDesignator>Null, Dwelling  (Part Of)</LocatorDesignator>
      <thoroughfare>Abesinia Passage</thoroughfare>
      <LocatorName>Dwelling  (Part Of)</LocatorName>
   </Rowinfo>
   <Rowinfo>
      <Locator>1a</Locator>
      <LocatorDesignator>Null, Edmund's Home</LocatorDesignator>
      <thoroughfare>Arena's Palace Lane</thoroughfare>
      <LocatorName>Edmund's Home</LocatorName>
   </Rowinfo>
</Address>

説明:

テンプレートと標準 XPathconcat()関数の適切な使用。

于 2012-08-19T21:42:50.673 に答える
0

テンプレートの 1 つに追加情報を追加するだけです。

<xsl:template match="/XMLCreators/row">
    <Rowinfo>
        <locatordesignator>
            <xsl:value-of select="RateLetter"/>
            <xsl:text> </xsl:text>
            <xsl:value-of select="RateAccomDesc"/>
        </locatordesignator>

        <xsl:apply-templates/>
    </Rowinfo>
</xsl:template>
于 2012-08-19T21:12:13.007 に答える