2

XSLTでの属性名を取得し、その名前に基づいていくつかの操作を行う必要があります。

ソース:

<group  xlink:type="simple" xlink:href="XXX" xlink:title="sectionHeader_1" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
<group  xlink:type="simple" xlink:href="YYY" xlink:title="BodyParagraph_1" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
<group  xlink:type="simple" xlink:href="ZZZ" xlink:title="sectionHeader_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
<group  xlink:type="simple" xlink:href="AAA" xlink:title="sectionHeader_3" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
<group  xlink:type="simple" xlink:href="BBB" xlink:title="BodyParagraph_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
<group  xlink:type="simple" xlink:href="BBB" xlink:title="ConditionalText_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>

その中の属性属性を取得してxlink:title、次のことを確認する必要があります。

  • 属性xlink:titleに文字列sectionHeaderが含まれている場合、いくつかの操作を行う必要があります。
  • 属性xlink:titleに文字列BodyParagraphが含まれている場合、いくつかの操作が必要です。
  • 属性xlink:titleに文字列ConditionalTextが含まれている場合、いくつかの操作が必要です。

誰かがそれがどのように行われることができるか説明できますか?

4

3 に答える 3

1

XSLTを使用して既存のXMLファイルの一部を変更することはできないため、すべてをコピーして、異なるはずの部分を変更する必要があります。したがって、デフォルトで各ノードをコピーするテンプレートを作成することをお勧めします。次に、条件に一致するグループ要素に特化したテンプレートを追加できます。たとえば、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xlink="http://www.w3.org/1999/xlink">

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

  <xsl:template match="group[contains(@xlink:title,'sectionHeader')]">
    <group>
      <xsl:copy-of select="@*"/>      
      <!-- modifications here -->
    </group>
  </xsl:template>

  <xsl:template match="group[contains(@xlink:title,'BodyParagraph')]">
    <group>
      <xsl:copy-of select="@*"/>
      <!-- modifications here -->
    </group>
  </xsl:template>

  <xsl:template match="group[contains(@xlink:title,'ConditionalText')]">
    <group>
      <xsl:copy-of select="@*"/>
      <!-- modifications here -->
    </group>
  </xsl:template>  
</xsl:stylesheet>

属性値も変更したい場合は、xsl:copy-ofステートメントを必要な変更に置き換えてください。

于 2012-04-21T09:10:00.353 に答える
1

テンプレートとパターン マッチングを使用して、明示的な条件付き命令を最小限に抑えるか完全に排除することは、XSLT の精神に基づいています。

これを行う方法は次のとおりです。

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

 <xsl:template match="group">
     <xsl:apply-templates select="@xlink:title"/>
 </xsl:template>

 <xsl:template match="@xlink:title[contains(., 'sectionHeader')]">
   Found @xlink:title containing "sectionHeader"
 </xsl:template>

 <xsl:template match="@xlink:title[contains(., 'BodyParagraph')]">
   Found @xlink:title containing "BodyParagraph"
 </xsl:template>

 <xsl:template match="@xlink:title[contains(., 'ConditionalText')]">
   Found @xlink:title containing "ConditionalText"
 </xsl:template>
</xsl:stylesheet>

この変換が提供された XML フラグメントに適用されると(整形式の XML ドキュメントに変換されます):

<t>
    <group  xlink:type="simple" xlink:href="XXX" xlink:title="sectionHeader_1" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group  xlink:type="simple" xlink:href="YYY" xlink:title="BodyParagraph_1" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group  xlink:type="simple" xlink:href="ZZZ" xlink:title="sectionHeader_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group  xlink:type="simple" xlink:href="AAA" xlink:title="sectionHeader_3" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group  xlink:type="simple" xlink:href="BBB" xlink:title="BodyParagraph_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group  xlink:type="simple" xlink:href="BBB" xlink:title="ConditionalText_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
</t>

必要な結果(それぞれの場合に行われる何か)が生成されます:

   Found @xlink:title containing "sectionHeader"

   Found @xlink:title containing "BodyParagraph"

   Found @xlink:title containing "sectionHeader"

   Found @xlink:title containing "sectionHeader"

   Found @xlink:title containing "BodyParagraph"

   Found @xlink:title containing "ConditionalText"

注意starts-with():ではなく関数を使用することを検討してくださいcontains()

于 2012-04-21T15:59:07.593 に答える
1

ソース XML (いくつかの変更が行われています):

<?xml version="1.0"?>
<root>
    <group id="x1" xlink:type="simple" xlink:href="XXX" xlink:title="sectionHeader_1" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group id="x2" xlink:type="simple" xlink:href="YYY" xlink:title="BodyParagraph_1" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group id="x3" xlink:type="simple" xlink:href="ZZZ" xlink:title="sectionHeader_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group id="x4" xlink:type="simple" xlink:href="AAA" xlink:title="sectionHeader_3" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group id="x5" xlink:type="simple" xlink:href="BBB" xlink:title="BodyParagraph_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group id="x6" xlink:type="simple" xlink:href="BBB" xlink:title="ConditionalText_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
    <group id="x7" xlink:type="simple" xlink:href="BBB" xlink:title="some_other_2" xmlns:xlink="http://www.w3.org/1999/xlink"></group>
</root>

XSL ドキュメント:

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink">

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

<xsl:template match="//group[(contains(@xlink:title,'sectionHeader') or contains(@xlink:title,'BodyParagraph') or contains(@xlink:title,'ConditionalText'))]">
    <xsl:element name="element">
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <xsl:attribute name="type"><xsl:value-of select="@xlink:type"/></xsl:attribute>
        <xsl:attribute name="href"><xsl:value-of select="@xlink:href"/></xsl:attribute>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

そして結果:

<?xml version='1.0' ?>
<elements xmlns:xlink="http://www.w3.org/1999/xlink">
    <element id="x1" type="simple" href="XXX"/>
    <element id="x2" type="simple" href="YYY"/>
    <element id="x3" type="simple" href="ZZZ"/>
    <element id="x4" type="simple" href="AAA"/>
    <element id="x5" type="simple" href="BBB"/>
    <element id="x6" type="simple" href="BBB"/>    
</elements>
于 2012-04-21T09:18:42.907 に答える