2012-03-15 20 views
0

私は次のXMLファイルを持っています(実際にはSQL ServerレポートサービスRDLファイルです)。 TablixCell<Value>Fields<DataField>の位置に置き換えたいとします。すなわち、「order date1」および「prod id1」は、それぞれ「order_date」および「prod_id」に置き換えられるべきである。位置によってテキストを置き換えますか?

XQueryを使用してSQL Server 2008で実行できます。 XSLTはそうでない場合には問題ありません。

<Fields> 
    <Field Name="order_date"> 
     <DataField>order_date</DataField> 
     <rd:TypeName>System.DateTime</rd:TypeName> 
    </Field> 
    <Field Name="prod_id"> 
     <DataField>prod_id</DataField> 
     <rd:TypeName>System.Int32</rd:TypeName> 
    </Field> 
    .... 
    </Fields> 
    ...... 
     <TablixRows> 
      <TablixRow> 
       <Height>0.25in</Height> 
       <TablixCells> 
       <TablixCell> 
        ...... 
           <Value>order date1</Value> 
        ...... 
       </TablixCell> 
       <TablixCell> 
        ..... 
           <Value>prod id1</Value> 
        ..... 
+0

であるあなたは何を」についての詳細を説明することができます達成しようとしていますか?私の最初の考えは、あなたがrdlファイルで見つけて置き換えることができるということです...しかし、XQueryを使用しようとしているという事実は、この1つのファイルで文字列を置き換えることよりも大きな目標があるのだろうかと思います。 – Rose

+0

はい、1つのXMLファイルに複数のフィールドしかない場合は、検索と置換が問題ありません。ただし、50のレポートにはそれぞれ数百の列があります。 – ca9163d9

+1

提供されたXMLファイルの抜粋には「prod_date」はありません。抜粋は整形式のXMLファイルではなく、整形式のXMLフラグメントでもありません。編集して修正してください。 –

答えて

1

次のことを試してみてください。

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

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

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

<xsl:template match="TablixCell"> 
    <xsl:copy> 
     <xsl:apply-templates> 
      <xsl:with-param name="pos" select="position()"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Value"> 
    <xsl:param name="pos"/> 
    <xsl:copy> 
     <xsl:value-of select="//Fields/Field[$pos]/DataField"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

入力XML

<?xml version="1.0" encoding="UTF-8"?> 
<Fields> 
    <Field Name="order_date"> 
     <DataField>order_date</DataField> 
     <rd:TypeName>System.DateTime</rd:TypeName> 
    </Field> 
    <Field Name="prod_id"> 
     <DataField>prod_id</DataField> 
     <rd:TypeName>System.Int32</rd:TypeName> 
    </Field> 
    <Field Name="xxx_id"> 
     <DataField>zzz_id</DataField> 
     <rd:TypeName>System.String16</rd:TypeName> 
    </Field> 
    <TablixRows> 
     <TablixRow> 
      <Height>0.25in</Height> 
      <TablixCells> 
       <TablixCell> 
        <Value>order date1</Value> 
       </TablixCell> 
       <TablixCell> 
        <Value>prod id1</Value> 
       </TablixCell> 
       <TablixCell> 
        <Value>xxx id1</Value> 
       </TablixCell> 
      </TablixCells> 
     </TablixRow> 
    </TablixRows> 
</Fields> 

でこれを実行すると、結果が必要

<?xml version="1.0" encoding="UTF-8"?> 
<Fields> 
    <Field Name="order_date"> 
     <DataField>order_date</DataField> 
     <rd:TypeName>System.DateTime</rd:TypeName> 
    </Field> 
    <Field Name="prod_id"> 
     <DataField>prod_id</DataField> 
     <rd:TypeName>System.Int32</rd:TypeName> 
    </Field> 
    <Field Name="xxx_id"> 
     <DataField>zzz_id</DataField> 
     <rd:TypeName>System.String16</rd:TypeName> 
    </Field> 
    <TablixRows> 
     <TablixRow> 
      <Height>0.25in</Height> 
      <TablixCells> 
       <TablixCell> 
        <Value>order_date</Value> 
       </TablixCell> 
       <TablixCell> 
        <Value>prod_id</Value> 
       </TablixCell> 
       <TablixCell> 
        <Value>zzz_id</Value> 
       </TablixCell> 
      </TablixCells> 
     </TablixRow> 
    </TablixRows> 
</Fields> 
関連する問題