1

XML 要素を再配置し、各要素から関連する値を抽出して、XML または cvs 出力を生成したいと考えています。

(xsl:value-of) が要素の値の抽出に使用されている資料を読みましたが、要素から特定の値を抽出するためにどのように使用できるかわかりません。これらはサンプルの XML データです。

<Add>
<Row>
<L>1</L>
<LD>Dwelling  (Part Of), Null</LD>
<th>NULL</th>
<AA>Abesinia Passage</AA>
<LN>Dwelling  (Part Of)</LN>
</Row>

たとえば、(Addressarea) 要素から接尾辞として Estate または island を持つ値を抽出したいとします。

また、(throughfare) 要素から、NULL 値または接尾辞 Estate または island を持つ値を削除したいと考えています。

4

1 に答える 1

0

この変換:

<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:param name="pOrder" select=
  "'|LocatorDesignator|LocatorName|Locator|thoroughfare|addressArea|'"/>

 <xsl:variable name="vOrder" select="document('')/*/xsl:param[@name='pOrder']/*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="Rowinfo">
  <xsl:copy>
   <xsl:apply-templates select="*">
     <xsl:sort data-type="number" select=
     "string-length(substring-before($pOrder, concat('|', name(), '|')))"/>
   </xsl:apply-templates>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

次の XML ドキュメントに適用した場合(前の質問の回答によって生成されます):

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

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

<Address>
    <Rowinfo>
        <LocatorDesignator>Null, Dwelling  (Part Of)</LocatorDesignator>
        <LocatorName>Dwelling  (Part Of)</LocatorName>
        <Locator>1</Locator>
        <thoroughfare>Abesinia Passage</thoroughfare>
        <addressArea>Some Address Area</addressArea>
    </Rowinfo>
    <Rowinfo>
        <LocatorDesignator>Null, Edmund's Home</LocatorDesignator>
        <LocatorName>Edmund's Home</LocatorName>
        <Locator>1a</Locator>
        <thoroughfare>Arena's Palace Lane</thoroughfare>
        <addressArea>Some Other Address Area</addressArea>
    </Rowinfo>
</Address>
于 2012-08-21T16:45:54.270 に答える