Output.xml已经形成。
我必须解析Input.xml才能从Input.xml的映射中找到Test_ID的Feature_ID,并将其添加到Output.xml。
我当时想XSLT可以做到这一点。 XSLT的外观如何?
Input.xml
<Mapping>
<Test>
<Test_ID>123</Test_ID>
<Feature_ID>111</Feature_ID>
</Test>
<Test>
<Test_ID>456</Test_ID>
<Feature_ID>222</Feature_ID>
</Test>
</Mapping>
当前(已形成)Output.xml
<?xml version="1.0" encoding="UTF-8"?>
<Suite>
<Test>
<Test_ID>123</Test_ID>
<Test_Name>Test_First</Test_Name>
</Test>
<Test>
<Test_ID>456</Test_ID>
<Test_Name>Test_Second</Test_Name>
</Test>
</Suite>
所需的Output.xml
<Suite>
<Test>
<Test_ID>123</Test_ID>
<Test_Name>Test_First</Test_Name>
<Feature_ID>111</Feature_ID>
</Test>
<Test>
<Test_ID>456</Test_ID>
<Test_Name>Test_Second</Test_Name>
<Feature_ID>222</Feature_ID>
</Test>
</Suite>
此外,如何在以下命令中传递Output.xml?
xsltproc XSLT.xsl Input.xml> Output_New.xml
答案 0 :(得分:1)
要将元素从一个文档复制到另一个文档,请考虑XSLT脚本中的document()
函数。然后仅在运行主输入文档时调用xsltproc
。
实际上,根据您想要的结果, Input 应该是 Output ,反之亦然,因为根是 Suite 。
XSLT (注意其中引用了Input.xml)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/Suite">
<xsl:copy>
<xsl:apply-templates select="Test"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Test">
<xsl:copy>
<xsl:variable name="curr_id" select="Test_ID"/>
<xsl:copy-of select="Test_ID|Test_Name"/>
<xsl:copy-of select="document('Input.xml')/Mapping/Test[Test_ID = $curr_id]/Feature_ID"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
xsltproc
xsltproc myScript.xsl Output.xml > myDesiredResult.xml
结果
<Suite>
<Test>
<Test_ID>123</Test_ID>
<Test_Name>Test_First</Test_Name>
<Feature_ID>111</Feature_ID>
</Test>
<Test>
<Test_ID>456</Test_ID>
<Test_Name>Test_Second</Test_Name>
<Feature_ID>222</Feature_ID>
</Test>
</Suite>