我有一个XML文件,它使用非常通用的XML标记名称,但具有丰富的属性结构,例如:
<Field Name="CRSDESC1" FieldName="{@CRS_DESC}"><FormattedValue>Survey of Human Anatomy and Physiology</FormattedValue></Field>
我想通过使用“Name”属性更改现有的元素名称,如下所示:
<CRSDESC1>Survey of Human Anatomy and Physiology</CRSDESC1>
创建新元素后,我们不再需要元素<FormattedValue>
,也不需要重复<Value>
以下是XML的示例部分:
<CrystalReport> <ReportHeader><Details Level="1">
<Section SectionNumber="0">
<Field Name="CRSDESC1" FieldName="{@CRS_DESC}"><FormattedValue>Heating and Air Contracting</FormattedValue><Value>Heating and Air Contracting</Value></Field>
<Field Name="CRSTITLE1" FieldName="{@CRS_TITLE}"><FormattedValue>Heating and Air Conditioning Contracting</FormattedValue><Value>Heating and Air Conditioning Contracting</Value></Field>
<Field Name="CRSDEPTS1" FieldName="{Command.CRS_DEPTS}"><FormattedValue>AIRC</FormattedValue><Value>AIRC</Value></Field>
<Field Name="DEPTSDESC1" FieldName="{Command.DEPTS_DESC}"><FormattedValue>Heating, A/C & Refrigeration</FormattedValue><Value>Heating, A/C & Refrigeration</Value></Field>
<Field Name="CRSNO1" FieldName="{Command.CRS_NO}"><FormattedValue>2260</FormattedValue><Value>2260</Value></Field>
<Field Name="CRSSTANDARDARTICULATIONNO1" FieldName="{Command.CRS_STANDARD_ARTICULATION_NO}"><FormattedValue></FormattedValue><Value></Value></Field>
<Field Name="CRSMINCRED1" FieldName="{Command.CRS_MIN_CRED}"><FormattedValue>3.00</FormattedValue><Value>3.00</Value></Field>
</Section>
</Details>
<Details Level="1">
<Section SectionNumber="0">
<Field Name="CRSDESC1" FieldName="{@CRS_DESC}"><FormattedValue>Survey of Human Anatomy and Physiology</FormattedValue><Value>Survey of Human Anatomy and Physiology</Value></Field>
<Field Name="CRSTITLE1" FieldName="{@CRS_TITLE}"><FormattedValue>Survey of Human Anatomy and Physiology</FormattedValue><Value>Survey of Human Anatomy and Physiology</Value></Field>
<Field Name="CRSDEPTS1" FieldName="{Command.CRS_DEPTS}"><FormattedValue>ANAT</FormattedValue><Value>ANAT</Value></Field>
<Field Name="DEPTSDESC1" FieldName="{Command.DEPTS_DESC}"><FormattedValue>Anatomy & Physiology</FormattedValue><Value>Anatomy & Physiology</Value></Field>
<Field Name="CRSNO1" FieldName="{Command.CRS_NO}"><FormattedValue>1500</FormattedValue><Value>1500</Value></Field>
<Field Name="CRSSTANDARDARTICULATIONNO1" FieldName="{Command.CRS_STANDARD_ARTICULATION_NO}"><FormattedValue>L1 904L</FormattedValue><Value>L1 904L</Value></Field>
<Field Name="CRSMINCRED1" FieldName="{Command.CRS_MIN_CRED}"><FormattedValue>4.00</FormattedValue><Value>4.00</Value></Field>
</Section>
</Details> <ReportHeader><CrystalReport>
答案 0 :(得分:2)
这样可行......
XML输入(已更正为格式良好)
<CrystalReport>
<ReportHeader>
<Details Level="1">
<Section SectionNumber="0">
<Field Name="CRSDESC1" FieldName="{@CRS_DESC}">
<FormattedValue>Heating and Air Contracting</FormattedValue>
<Value>Heating and Air Contracting</Value>
</Field>
<Field Name="CRSTITLE1" FieldName="{@CRS_TITLE}">
<FormattedValue>Heating and Air Conditioning Contracting</FormattedValue>
<Value>Heating and Air Conditioning Contracting</Value>
</Field>
<Field Name="CRSDEPTS1" FieldName="{Command.CRS_DEPTS}">
<FormattedValue>AIRC</FormattedValue>
<Value>AIRC</Value>
</Field>
<Field Name="DEPTSDESC1" FieldName="{Command.DEPTS_DESC}">
<FormattedValue>Heating, A/C & Refrigeration</FormattedValue>
<Value>Heating, A/C & Refrigeration</Value>
</Field>
<Field Name="CRSNO1" FieldName="{Command.CRS_NO}">
<FormattedValue>2260</FormattedValue>
<Value>2260</Value>
</Field>
<Field Name="CRSSTANDARDARTICULATIONNO1" FieldName="{Command.CRS_STANDARD_ARTICULATION_NO}">
<FormattedValue/>
<Value/>
</Field>
<Field Name="CRSMINCRED1" FieldName="{Command.CRS_MIN_CRED}">
<FormattedValue>3.00</FormattedValue>
<Value>3.00</Value>
</Field>
</Section>
</Details>
<Details Level="1">
<Section SectionNumber="0">
<Field Name="CRSDESC1" FieldName="{@CRS_DESC}">
<FormattedValue>Survey of Human Anatomy and Physiology</FormattedValue>
<Value>Survey of Human Anatomy and Physiology</Value>
</Field>
<Field Name="CRSTITLE1" FieldName="{@CRS_TITLE}">
<FormattedValue>Survey of Human Anatomy and Physiology</FormattedValue>
<Value>Survey of Human Anatomy and Physiology</Value>
</Field>
<Field Name="CRSDEPTS1" FieldName="{Command.CRS_DEPTS}">
<FormattedValue>ANAT</FormattedValue>
<Value>ANAT</Value>
</Field>
<Field Name="DEPTSDESC1" FieldName="{Command.DEPTS_DESC}">
<FormattedValue>Anatomy & Physiology</FormattedValue>
<Value>Anatomy & Physiology</Value>
</Field>
<Field Name="CRSNO1" FieldName="{Command.CRS_NO}">
<FormattedValue>1500</FormattedValue>
<Value>1500</Value>
</Field>
<Field Name="CRSSTANDARDARTICULATIONNO1" FieldName="{Command.CRS_STANDARD_ARTICULATION_NO}">
<FormattedValue>L1 904L</FormattedValue>
<Value>L1 904L</Value>
</Field>
<Field Name="CRSMINCRED1" FieldName="{Command.CRS_MIN_CRED}">
<FormattedValue>4.00</FormattedValue>
<Value>4.00</Value>
</Field>
</Section>
</Details>
</ReportHeader>
</CrystalReport>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Field[@Name]">
<xsl:element name="{@Name}">
<xsl:value-of select="FormattedValue"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
XML输出
<CrystalReport>
<ReportHeader>
<Details Level="1">
<Section SectionNumber="0">
<CRSDESC1>Heating and Air Contracting</CRSDESC1>
<CRSTITLE1>Heating and Air Conditioning Contracting</CRSTITLE1>
<CRSDEPTS1>AIRC</CRSDEPTS1>
<DEPTSDESC1>Heating, A/C & Refrigeration</DEPTSDESC1>
<CRSNO1>2260</CRSNO1>
<CRSSTANDARDARTICULATIONNO1/>
<CRSMINCRED1>3.00</CRSMINCRED1>
</Section>
</Details>
<Details Level="1">
<Section SectionNumber="0">
<CRSDESC1>Survey of Human Anatomy and Physiology</CRSDESC1>
<CRSTITLE1>Survey of Human Anatomy and Physiology</CRSTITLE1>
<CRSDEPTS1>ANAT</CRSDEPTS1>
<DEPTSDESC1>Anatomy & Physiology</DEPTSDESC1>
<CRSNO1>1500</CRSNO1>
<CRSSTANDARDARTICULATIONNO1>L1 904L</CRSSTANDARDARTICULATIONNO1>
<CRSMINCRED1>4.00</CRSMINCRED1>
</Section>
</Details>
</ReportHeader>
</CrystalReport>