我需要将XML文件转换为另一个XML文件,但是会过滤掉一些不需要的记录。输出XML文件需要具有输入XML文件的确切节点结构。我认为一个简单的XSLT文件应该很容易做到这一点。使用XSLT过滤将XML转换为XML
下面是示例输入XML文件...
<?xml version="1.0" encoding="utf-8" ?>
<RepeaterData>
<Version />
<Items>
<Item>
<response type="System.String">xxx</response>
<response_date type="System.String" />
<digital_signature_field_profile_name type="System.String">tester3_Dianne</digital_signature_field_profile_name>
<approver_role type="System.String">tester3</approver_role>
<approver_workflow_group type="System.Int32">3</approver_workflow_group>
<approver_workflow_sequence_in_group type="System.Int32">2</approver_workflow_sequence_in_group>
</Item>
<Item>
<response type="System.String">xxx</response>
<response_date type="System.String" />
<digital_signature_field_profile_name type="System.String">tester2_Ben</digital_signature_field_profile_name>
<approver_role type="System.String">tester2</approver_role>
<approver_workflow_group type="System.Int32">1</approver_workflow_group>
<approver_workflow_sequence_in_group type="System.Int32">3</approver_workflow_sequence_in_group>
</Item>
<Item>
<response type="System.String" />
<response_date type="System.String" />
<digital_signature_field_profile_name type="System.String">tester1_Greg</digital_signature_field_profile_name>
<approver_role type="System.String">tester1</approver_role>
<approver_workflow_group type="System.Int32">4</approver_workflow_group>
<approver_workflow_sequence_in_group type="System.Int32">1</approver_workflow_sequence_in_group>
</Item>
<Item>
<response type="System.String" />
<response_date type="System.String" />
<digital_signature_field_profile_name type="System.String">tester4_Erin</digital_signature_field_profile_name>
<approver_role type="System.String">tester4</approver_role>
<approver_workflow_group type="System.Int32">3</approver_workflow_group>
<approver_workflow_sequence_in_group type="System.Int32">2</approver_workflow_sequence_in_group>
</Item>
<Item>
<response type="System.String" />
<response_date type="System.String" />
<digital_signature_field_profile_name type="System.String">tester5_Sherry</digital_signature_field_profile_name>
<approver_role type="System.String">tester5</approver_role>
<approver_workflow_group type="System.Int32">3</approver_workflow_group>
<approver_workflow_sequence_in_group type="System.Int32">1</approver_workflow_sequence_in_group>
</Item>
</Items>
</RepeaterData>
这里是所需的输出XML文件的样品(如果我们对响应滤波器不是空/空)...
<?xml version="1.0" encoding="utf-8"?>
<RepeaterData>
<Version />
<Items>
<Item>
<response type="System.String">xxx</response>
<response_date type="System.String" />
<digital_signature_field_profile_name type="System.String">tester3_Dianne</digital_signature_field_profile_name>
<approver_role type="System.String">tester3</approver_role>
<approver_workflow_group type="System.Int32">3</approver_workflow_group>
<approver_workflow_sequence_in_group type="System.Int32">2</approver_workflow_sequence_in_group>
</Item>
<Item>
<response type="System.String">xxx</response>
<response_date type="System.String" />
<digital_signature_field_profile_name type="System.String">tester2_Ben</digital_signature_field_profile_name>
<approver_role type="System.String">tester2</approver_role>
<approver_workflow_group type="System.Int32">1</approver_workflow_group>
<approver_workflow_sequence_in_group type="System.Int32">3</approver_workflow_sequence_in_group>
</Item>
</Items>
</RepeaterData>
一些努力我创造了这个XSLT ...
<?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" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="/">
<xsl:copy-of select ="RepeaterData/Items/Item[response != '']"/>
</xsl:for-each>
</xsl:template >
</xsl:stylesheet>
但它产生缺失节点的XML文件。 missig节点是“RepeaterData”,“Version”和“Items”。
<?xml version="1.0" encoding="utf-8"?>
<Item>
<response type="System.String">xxx</response>
<response_date type="System.String" />
<digital_signature_field_profile_name type="System.String">tester3_Dianne</digital_signature_field_profile_name>
<approver_role type="System.String">tester3</approver_role>
<approver_workflow_group type="System.Int32">3</approver_workflow_group>
<approver_workflow_sequence_in_group type="System.Int32">2</approver_workflow_sequence_in_group>
</Item>
<Item>
<response type="System.String">xxx</response>
<response_date type="System.String" />
<digital_signature_field_profile_name type="System.String">tester2_Ben</digital_signature_field_profile_name>
<approver_role type="System.String">tester2</approver_role>
<approver_workflow_group type="System.Int32">1</approver_workflow_group>
<approver_workflow_sequence_in_group type="System.Int32">3</approver_workflow_sequence_in_group>
</Item>
人们会认为这是建立XSLT过滤器一个通用的方法,而不必手动嵌入这些缺少的节点进入XSLT输出。
我查看了样本,但找不到无用数据基本上返回相同XML文件的内容。
问候奔
谢谢。这是我正在寻找的。我曾尝试过几个与此类似的XSLT版本,但还没有达到正确的模板组合。我知道有更好更简单的XSLT。 – 2014-10-29 20:10:36